SendMessage C ++鼠标右键不起作用鼠标左键起作用吗?

时间:2020-03-09 15:11:27

标签: c++ windows winapi sendmessage

我想使用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中是否有任何错误?

1 个答案:

答案 0 :(得分:0)

我很困惑,因为这两行是如此相似。有没有错误 在mspaint中?

这两个代码行可以成功执行,并且确实向目标窗口发送WM_LBUTTONDOWNWM_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.");

以上代码的测试结果:

enter image description here

注意:正如其他社区已经指出的那样,使用SendInput而不是SendMessage合成击键,鼠标动作和按钮点击

相关问题