2013-05-03 2 views
0

약간의 응용 프로그램을 만들고 있는데 워드 문서에서 특정 위치를 클릭해야합니다. 동일한 결과를 얻기 "를 PostMessage를"나는 또한 사용되었지만, sendMessage 첨부를 "SendMessage가 Word 응용 프로그램에서 작동하지 않습니다.

내가 사용하고 있습니다.

#include <Windows.h> 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    HWND win_handle = FindWindow(L"OpusApp", NULL); 
    if (win_handle != NULL) 
    { 
     POINT win_coords = {1310, 360}; 
     POINT ctrl_coords = win_coords; 

     ScreenToClient(win_handle, &win_coords); 
     WCHAR windowsText1[200]; 
     GetWindowText(win_handle, windowsText1, 200); 
     //SetCapture(win_handle); 
     LPARAM lParam = MAKELPARAM(win_coords.x, win_coords.y); 
     LRESULT hr_d = SendMessage(win_handle, WM_LBUTTONDOWN, 0, lParam); 
     LRESULT hr_u = SendMessage(win_handle, WM_LBUTTONUP, 0, lParam); 
    } 
    return 0; 
} 

어떤 제안을?

감사합니다. 먼저

+4

"작동하지 않는다"는 것은 정확히 무엇을 의미합니까? 우리는 당신의 마음을 읽을 수 없습니다. 우리가 당신을 도울 수 있기를 원한다면 당신의 질문에 구체적이어야합니다. –

+1

Spy ++ 또는 다른 스파이 앱을 사용하여 "OpusApp"창이 마우스 메시지를 보낼 올바른 창인지 확인 했습니까? 일부 앱은 숨겨진 창을 사용합니다. –

+0

Word에는 광범위한 자동화 모델이 있습니다. 그걸 사용해야합니다. –

답변

4

을, 당신은 사용하지 말아야합니다 SendMessage 또는 PostMessage를 사용하여 입력 보내기 일부 프로그램에서는 작동하지만 메시지를 직접 보내거나 게시해도 입력과 관련된 내부 상태는 업데이트되지 않으므로 입력을 감지하지 못하는 등 이상한 일이 발생할 수 있습니다.

그 이유는 SendInput이 존재합니다. 이것은 마우스 드라이버가 사용하는 것과 동일한 수준의 입력을 주입하므로 Windows는 해당 상태를 올바르게 유지합니다. 물론 이것은 글로벌 입력을위한 것입니다. 창이 전경에 있는지 확인할 수있는 방법이 없다면 다음을 살펴보아야 할 것입니다. UI Automation.

+0

고맙습니다 @ 존 S., 처음에는 실제 왼쪽 마우스 클릭을 시뮬레이트하기 위해 SendInput으로 시도했지만 문제는 내 응용 프로그램이 항상 활성 창으로 실행되고 나서 마우스 이벤트를 처리하는 내 앱입니다. 그런 다음 "Send/PostMessage"를 사용하여 이벤트를 Word 응용 프로그램에 보내려고했습니다. –

+0

이 경우 UI 자동화를 사용해야합니다. –

+0

결국, 나는 http://msdn.microsoft.com/en-us/library/office/hh780901(v=office.14).aspx에 의해 해결책을 얻었습니다. 내 활성 창에서 RangeFromPoint를 사용하여 범위를 가져오고 range.Select. 어쩌면 문제는 내가 질문을 올바르게하지 않았을 것입니다. –

관련 문제