【发布时间】:2020-03-09 15:11:27
【问题描述】:
我想使用 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 有什么 bug 吗?
【问题讨论】:
-
我确定我可以用右键在绘图区画一些东西,而不是设置错误的白色。
-
您不能以这种方式伪造输入。如果您想伪造输入,请致电
SendInput。 -
并且Sendmessage函数返回零,表示成功完成。
-
@David Heffernan 但是为什么呢? SendInput 会获得焦点吗?
-
1.如果你想伪造输入,你必须使用
SendInput。 2.SendInput将消息放入具有输入焦点的线程的队列中。一旦你理解了这两个陈述的后果,你可能已经准备好重新考虑你的目标了。这个问题每周都会在这里被问很多次。通过一些研究,您会看到我们一次又一次地给出相同的答案。也许这会对你有所帮助。
标签: c++ windows winapi sendmessage