SendMessage C ++ Правая кнопка мыши не работает Левая кнопка мыши работает? - PullRequest
0 голосов
/ 09 марта 2020

Я хочу использовать SendMessage для завершения части моей программы удаленного управления. Я думаю, что он будет контролировать компьютерную программу без фокусировки.

Вот мое демо. Я использую windows mspaint, чтобы проверить это. Это работает, когда я выкладываю «Левая кнопка вниз», поэтому я уверен, что мой HWND прав (дескриптор области рисования, полученный с помощью spy ++ или некоторых подобных инструментов). Это dr aws точка в моей "области рисования" в 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 голосов
/ 13 марта 2020

Я в замешательстве, потому что две строки очень похожи. Есть ли какие-либо ошибки в 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.");

Результат теста вышеупомянутого кода:

enter image description here

Примечание: Как уже отмечали другие сообщества, использование SendInput вместо SendMessage до Синтезирует нажатия клавиш, движения мыши и нажатия кнопок .

...