WM_MOUSEMOVE问题与位置

时间:2017-03-31 18:00:34

标签: c windows winapi visual-c++ user-input

我正在开发一个程序,它应该模拟程序的基本鼠标输入,同时它保留在后台(意思是,我希望在目标接收输入时用实际的鼠标和键盘在其他窗口中做其他事情) 。我需要做的一件事是将鼠标移动到特定的(x,y)点。

它似乎在大多数情况下都有效,但在屏幕的某个区域,消息只能在某些时候正常工作。其他时候,它会移动到区域内的一致但错误的其他点。我正在阅读,有时它是相对的,但如果我反复垃圾邮件,它似乎一直工作。另外,在Spy ++中读取,我实际移动鼠标所发送的消息正在使用似乎是绝对坐标。

我的功能在这里:

void mouseMove(short x, short y) {
    PostMessage(wnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y));
}

优选地,我希望任何(x,y)都是绝对的,所以我可以将该区域视为任何其他区域。但是将位置设置为相对于区域左上角的坐标也是可以的。

我在WM_MOUSEMOVE之前尝试了几乎所有我在Spy ++中发送到窗口的消息,但没有任何帮助。

我该如何处理?

编辑,因为细节可能无法证明足够的信息:

我按此顺序发送这些消息:

  • WM_ACTIVATE 2 0
  • WM_MOUSEMOVE 0 MAKELPARAM(x,y)
  • WM_LBUTTONDOWN MK_LBUTTON MAKELPARAM(x,y)
  • WM_LBUTTONUP 0 MAKELPARAM(x,y)

我认为我最初的想法(错误WM_SETCURSOR区域)是错误的,因为Spy ++始终显示HTCLIENT被使用。

我发现很多人都试图这样做(背景输入),而且大多数人似乎都被告知这是不可能的。这并非不可能,而且我认为如果有人能够一劳永逸地回答如何做到这一点,那将会让很多人受益匪浅。

1 个答案:

答案 0 :(得分:1)

合成击键,鼠标移动和按钮点击。

   UINT WINAPI SendInput(
      _In_ UINT    nInputs,
      _In_ LPINPUT pInputs,
      _In_ int     cbSize
    );
  

PostMessage功能。在消息队列中放置(发布)消息   与创建指定窗口的线程相关联   返回而不等待线程处理消息。

要使PostMessage工作,您需要在此过程中作为使用SetWindowHook可以实现的目标,但这些链接将完成这些工作:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx https://msdn.microsoft.com/en-us/library/ms171542(v=vs.110).aspx