|
/***********************************************************************************/
// 윈도우 이름이 A라는 TMainForm의 핸들(HWND)을 얻어서 첫번째 자식 패널의 "Start"라는 캡션을
// 가진 버튼을 클릭한다
HWND hWndMain = ::FindWindow("TMainForm", "A");
if( !(IsWindow( hWndMain)) )
return FALSE; // 에러처리등..
HWND hWndPannel = ::GetWindow( hWndMain, GW_CHILD);
if( !(IsWindow( hWndPannel)) )
return FALSE; // 에러처리등..
HWND hWndButton = ::FindWindowEx( hWndPannel, NULL, "TButton", "Start");
if( !(IsWindow( hWndButton)) )
return FALSE; // 에러처리등..
::SendMessage(hWndPannel, WM_COMMAND, NULL, MAKELONG(hWndButton, BN_CLICKED));
//***********************************************************************************/
버튼정도는 크게 어렵지 않습니다. 다만 다른 복잡한 컨트롤을 세부적으로 제어할려면 내부동작을 깊게 알아야겠지요.
저런식으로 원하는 컨트롤의 핸들을 구한뒤 SendMessage나 PostMessage로 메시지를 보내면 되더군요. 저건 빌더의 TMainForm으로 만든 윈도우의 TPannel에 올려진 버튼을 클릭하는 코드입니다.
VS .Net으로 만든 윈도우의 버튼을 클릭할려면 저런식으로 MAKELONG이 아닌 고정된 내부리소스 ID를 알아내서 그 ID를 넣어줘야합니다. 리소스 ID는 .Net의 Spy++같은 툴로 알아낼수 있습니다.
코드는 Win32 API로 되어있지만 빌더에도 적용가능하다고 생각합니다.
김용수 님이 쓰신 글 :
: 안녕하세요. 급한 질문이 있어 오랜만에 글쓰기를 합니다.
: 얼마되지 않는 Builder 사용자이지만 이 홈페이지를 통해 희망을 가지고
: 즐거운 프로그램하고 있습니다.
:
: 다름이 아니오라
: A 라는 프로그램이 있고 유저가 직접 이 프로그램에서
: A-1이라는 버튼을 눌러서 어떤 일을 한다고 할때
:
: B 라는 프로그램을 작성하여 유저가 직접 A-1 버튼을
: 누르는 것을 B 프로그램으로 제어하고 싶습니다.
:
: 알고있는 방법은 B라는 프로그램을 윈도우즈 배치 파일과 같은
: 것으로 일괄처리하도록 하는 방법이 있지만, 이방법 말고
:
: B를 C++ Builder로 작성하여 할 수 있는 방법이 있는지요?
: 있다면 예제를 볼 수 있을까요?
|