2012-08-14 179 views
4

我一直在寻找一些关于这个特定问题的方法,我希望能够模拟在我目前附加的程序上点击鼠标左键。C++模拟鼠标左键点击最小化程序

现在,我创建一个线程来检查数据库中的某些值,当这些值返回时(我正在查找的值),我希望能够在任何x中发送鼠标左键单击,该程序的协调(尽管最小化)。

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 2012-08-15 12:08:04

+0

[同一问题在.Net](http://stackoverflow.com/questions/7029453/simulate-mouse-click-on-a-minimized-window?rq=1)。 – Deanna 2012-08-15 12:08:54

回答

4

如果你想火在你的应用程序中的鼠标事件,请使用SendMessage函数,并且您的消息将出现在窗口中,并带有句柄hWnd的消息泵。

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

您可能需要为通知WM_LBUTTONUP,这取决于你的应用程序处理它的鼠标事件的方式。

+0

这不工作,作为一个说明,它不是我的应用程序,因为我正在注入一个DLL到程序中。 – User 2012-08-14 11:16:07

+4

尝试使用PostMessage而不是SendMessage(发布真正的鼠标消息,目标应用程序可能在其消息循环中而不是在窗口过程中查找它们)。当目标应用程序最小化时,可能会特别忽略输入。 – 2012-08-15 04:34:03