【发布时间】:2017-08-26 02:17:48
【问题描述】:
我正在开发一个程序,该程序应该在后台模拟程序的基本鼠标输入(意思是,我想在目标接收输入时使用实际的鼠标和键盘在其他窗口中执行其他操作) .我需要做的一件事是将鼠标移动到特定的 (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 0WM_MOUSEMOVE 0 MAKELPARAM(x,y)WM_LBUTTONDOWN MK_LBUTTON MAKELPARAM(x,y)WM_LBUTTONUP 0 MAKELPARAM(x,y)
我认为我最初的想法(错误的WM_SETCURSOR 区域)是错误的,因为 Spy++ 始终显示HTCLIENT 被使用。
我发现很多人都在尝试这样做(后台输入),而且大多数人似乎都被告知这是不可能的。这不是不可能的,我认为如果有人能一劳永逸地回答如何正确地做到这一点,那将是对很多人的一个大忙。
【问题讨论】:
-
@WeatherVane 我确实尝试过,即使在该地区的点 x 和 y 也是通话前的样子。不过,我仍然非常相信这有点相关。
-
你有什么特别的问题吗(x,y)?我想我知道一些原因和解决方法,但在我听起来很愚蠢之前,你能给我一些关于你到底在做什么的更多信息。在某些情况下,ScreenToClient 的返回值也可能相同,例如您将窗口放在角落,然后屏幕和客户端的 0,0 可以相同。
-
基本上我有
HWND window;,我想从一个单独的应用程序向它发送输入。我正在使用 PostMessage 更改鼠标的位置,但 WM_MOUSEMOVE 似乎在窗口的一个特定区域(2D 正方形)中奇怪地工作(将鼠标置于错误的位置)。据我所知,它只在这一地区表现得很奇怪(可能还有其他地区,但至少在某些地区表现良好)。 -
我认为你应该在拒绝之前了解 UI 自动化。
标签: c windows winapi visual-c++ user-input