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_LBUTTONDOWNWM_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 合成击键、鼠标动作和按钮点击次数.