|
우선 여러가지 해결책이 있습니다.
창이 떠 있는지 아닌지는 FindWindow로 찾으시면 되고요.
이렇게 FindWindow로 찾으시면 해당 윈도우의 Class명이나 또는 이름을 알아야 되고요
또는 지금 윈도우상에 떠있는 프로세서를 검사해보셔도 되요.
프로세서를 검사하는 프로그램 예제는 CBuilder 기본 예제에 있으니 참고하시고요.
또한 해당 윈도우를 찾으신후
특정 컨트롤을 찾아 메시지를 보내는 방식으로 하시면 되는데
해당 컨트롤을 아시면 그렇게 하셔도 되고요.
아님 해당 윈도우의 child 윈도우를 뒤지셔서 찾으셔야 되요.
또한 일반적으로 에뮬레이션에는 SendMessage 를 사용하지 않고요
keybd_event 함수를 사용합니다.
또한 아울러 마우스에뮬레이션은 mouse_event를 사용합니다.
컨트롤 아이디는
프로그래머가 정하는 것 입니다.
resource를 만들때 ID를 부여 합니다. 물론 같은 창에 같은 아이디가 있을수 있습니다.
그러나 이는 같은 기능을 수행하도록 하기 위함이죠.
즉 메뉴를 누를때와 툴바 버튼을 누를때 같은 동작을 처리하기 위하여 같은 ID를 부여하여
사용합니다.
그러나 이렇게 정해진 아이디 번호는 항상 고정입니다.
프로그램이 실행할때 정해지는게 아니라 즉 프로그래머가 정해진 번호이니 어떤 OS건간에
같은 번호를 갖습니다.
참고하세요.
알림창 님이 쓰신 글 :
: 안녕하세요.
: A 프로그램에서 ShowMessage 또는 이와 비슷한 메세지가 발생했을때
: B라는 프로그램(또는 A 프로그램 내부에서)에서 사용자가 엔터키를
: 누르지 않아도 자동으로 엔터키를 주는 효과를 주려 합니다.
:
: 검색을 해보니 우선 FindWindow로 윈도우 핸들을 얻고,
: 아래와 같은 방법으로 처리하려 합니다.
:
: if (hdHandle != NULL)
: {
: hControl = GetDlgItem(hdHandle, 컨트롤 ID) ;
:
: // CLICK메시지를 보낸다.
: SendMessage(hdHandle, WM_COMMAND, 컨트롤 ID, MAKELONG(hControl, BN_CLICKED)) ;
: }
:
: 여기서 궁금한 것은 위의 컨트롤 ID가 모든 컴퓨터에서 동일한
: 것입니까? 예를 들어 98에서 작성했으나 나중에 nt에서 사용하는
: 프로그램이라면 바뀌는 것은 아닌지요..
:
: 그리고.. A 프로그램(외부나 내부)에서 ShowMessage 또는 비슷한 메세지창이
: 발생한 것을 알아내는 괜찮은 방법이 있을까요?
: 지금 제 생각으로는 타이머에서 특정 간격마다 ShowMessage 창의
: 핸들을 체크해서 있으면 엔터키나 클릭을 보내려 하는데요..
: 이게 가능한 것일까요?
:
: 아니면 이것보다 더 좋은 방법이 있을까요?
: 조언 부탁합니다.
:
:
|