【问题标题】:C++ simulate left mouse click on minimized programC ++模拟鼠标左键单击最小化的程序
【发布时间】:2012-08-10 15:19:59
【问题描述】:

我一直在寻找有关我遇到的这个特殊问题的一些信息,我希望能够模拟鼠标左键单击我当前附加到的程序。

现在,我创建了一个线程来检查数据库中的某些值,当这些值返回时(我正在寻找的值),我希望能够在任何 x,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;
}

【问题讨论】:

  • 为什么几乎每周都会问这个问题的变体?人们不再搜索了吗?

标签: c++ winapi simulation


【解决方案1】:

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

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

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

【讨论】:

  • 这不起作用,请注意,这不是我的应用程序,因为我正在将 dll 注入程序中。
  • 尝试使用 PostMessage 而不是 SendMessage(真正的鼠标消息会被发布,并且目标应用程序可能会在其消息循环中而不是在窗口过程中寻找它们)。此外,目标应用程序在最小化时可能会专门忽略输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多