SendMessage C++ 鼠标右键不起作用鼠标左键有效吗?
SendMessage C++ Right mouse button doesn't work left mouse button works?
我想用SendMessage 来完成我的部分远程控制程序。案例我认为它会控制计算机程序而不使其获得焦点。
这是我的演示。我使用 windows mspaint 来测试它。它在我 post "Left button down" 时工作,所以我确信我的 HWND 是正确的(通过 spy++ 或一些类似工具获得的绘图区域句柄)。它在我的 "drawing area" in mspaint 中画了一个点。
但是当我 select 一种颜色和 运行 以下代码时。它不起作用。在同一个 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有没有bug?
I am confused because the two lines are so similar. Is there any bugs
in mspaint?
这两行代码可以成功执行,它们确实向目标window发送了WM_LBUTTONDOWN
和WM_RBUTTONDOWN
消息。我可以通过目标自己创建的 window 应用程序并在其中监视鼠标消息来确认这一点。所以也许差异取决于 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.");
以上代码的测试结果:
注意: 正如其他社区已经指出的那样,使用 SendInput
而不是 SendMessage
来 合成击键、鼠标动作和按钮点击次数.
我想用SendMessage 来完成我的部分远程控制程序。案例我认为它会控制计算机程序而不使其获得焦点。
这是我的演示。我使用 windows mspaint 来测试它。它在我 post "Left button down" 时工作,所以我确信我的 HWND 是正确的(通过 spy++ 或一些类似工具获得的绘图区域句柄)。它在我的 "drawing area" in mspaint 中画了一个点。 但是当我 select 一种颜色和 运行 以下代码时。它不起作用。在同一个 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有没有bug?
I am confused because the two lines are so similar. Is there any bugs in mspaint?
这两行代码可以成功执行,它们确实向目标window发送了WM_LBUTTONDOWN
和WM_RBUTTONDOWN
消息。我可以通过目标自己创建的 window 应用程序并在其中监视鼠标消息来确认这一点。所以也许差异取决于 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.");
以上代码的测试结果:
注意: 正如其他社区已经指出的那样,使用 SendInput
而不是 SendMessage
来 合成击键、鼠标动作和按钮点击次数.