我想使用SendMessage来完成我的远程控制程序的一部分。案例我认为它将控制计算机程序而不会使其变得集中。
这是我的演示。我使用Windows mspaint进行测试。当我按下“向左按下按钮”时,它可以工作,因此,我确定我的HWND是正确的(spy ++或某些类似工具获得的绘图区域手柄)。它在mspaint的“绘图区域”中绘制了一个点。但是当我选择一种颜色并运行以下代码时。没用在同一mspaint程序上的绘图区域中什么也没有发生。
这是我的代码:
#include <stdio.h>
#include <Windows.h>
int main(){
HWND hwnd;
printf("Please input your handle\n");
scanf("%d", &hwnd);
int x = 100, y = 100;
//int right = SendMessageA(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y)); //It works
int wrong = SendMessageA(hwnd, WM_RBUTTONDOWN, MK_RBUTTON, MAKELPARAM(x, y)); //It doesn't work
printf("%d", wrong);
printf("%d", GetLastError());
return 0;
}
我很困惑,因为这两行是如此相似。 mspaint中是否有任何错误?
我很困惑,因为这两行是如此相似。有没有错误在mspaint中吗?
这两个代码行可以成功执行,并且确实将WM_LBUTTONDOWN
和WM_RBUTTONDOWN
消息发送到目标窗口。我可以通过目标确认它自己创建的窗口应用程序并在其中监视鼠标消息。因此,差异可能取决于mspaint应用程序如何处理鼠标左键和右键单击。
以下代码对我来说适用于鼠标左键和右键。您可以尝试。
int x = 100, y = 100;
// Left mouse button click
int lResult = SendMessageA(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));
Sleep(500);
lResult = SendMessageA(hwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(x, y));
x += 10;
// Right mouse button click
int rResult = SendMessageA(hwnd, WM_RBUTTONDOWN, MK_RBUTTON, MAKELPARAM(x, y));
Sleep(500);
rResult = SendMessageA(hwnd, WM_RBUTTONUP, MK_RBUTTON, MAKELPARAM(x, y));
printf("Done.");
以上代码的测试结果: