2012-08-14 2 views
4

저는이 특정 문제에 대해 조금만 알아 봤습니다. 현재 연결되어있는 프로그램에서 마우스 왼쪽 버튼을 클릭하여 시뮬레이션 할 수 있기를 원합니다.C++은 최소화 된 프로그램을 마우스 왼쪽 버튼으로 시뮬레이션합니다.

지금 당장 데이터베이스를 검사하여 특정 값을 확인하는 스레드를 만들고 그 값이 돌아 왔을 때 (원하는 값을 찾았을 때) 왼쪽 마우스를 보내고 싶습니다. 프로그램의 y 좌표 (최소화 된 상태).

어떻게 Windows 7에서이 작업을 수행 할 수 있습니까? 감사!

편집 : 당신이 당신의 응용 프로그램에서 마우스 이벤트를 해고하려면 여기 내가 스레드를 호출하고 어떻게 ...

HWND child = GetActiveWindow(); 
if (child == NULL) 
MessageBox(0,"Couldn't get the child hwnd!","",0); 

DWORD ID; 
HANDLE thread_check_game = CreateThread (NULL , 0 , (LPTHREAD_START_ROUTINE) game_check_thread , (LPVOID)child, 0 , &ID); CloseHandle (game_check_thread); 

하고 ...

DWORD WINAPI game_check_thread(LPVOID lpParam) { 

HWND Window; 
Window = (HWND)lpParam; 
// ... some other code ... 
// ... 
WORD mouseX = 398; 
WORD mouseY = 398; 


SendMessage(Window,WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(mouseX,mouseY)); 
SendMessage(Window, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(mouseX, mouseY)); 
Write("Sent Left Click\n"); 

ExitThread(0); 
return 0; 
} 
+0

왜이 같은 질문에 변종이 거의 매주 요청됩니까? 사람들이 더 이상 검색하지 않습니까? – Deanna

+0

[.Net과 동일한 질문] (http://stackoverflow.com/questions/7029453/simulate-mouse-click-on-a-minimized-window?rq=1). – Deanna

답변

4

의를 사용 SendMessage이 작동하고 메시지는 hWnd의 메시지 펌프가있는 창에 나타납니다.

SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(mousePosX, mousePosY)); 

당신은 당신이 응용 프로그램이 마우스 이벤트의 처리하는 방식에 따라 WM_LBUTTONUP에 대한 통지해야합니다.

+0

그 프로그램에 dll을 주입 할 때 메모로 작동하지 않습니다. 내 응용 프로그램이 아닙니다. – User

+4

SendMessage 대신 PostMessage를 사용해보십시오 (실제 마우스 메시지가 게시되며 대상 앱이 창 프로 시저가 아닌 메시지 루프에서이를 찾고있을 수 있습니다). 또한 대상 앱이 최소화되었을 때 입력을 특별히 무시할 수 있습니다. –

관련 문제