Почему PostMessage с WM_LBUTTONDBLCLK не работает? - PullRequest
0 голосов
/ 05 марта 2019

Я запускаю этот код:

LPPOINT pp = new POINT;
GetCursorPos(pp);
while(1){
    PostMessage(GetDesktopWindow(), WM_LBUTTONDBLCLK, 0, MAKELPARAM(pp->x, pp->y));
    Sleep(1000);
}

Не нажимает на точку, указанную курсором, но открывает и закрывает меню «Пуск». Пожалуйста, скажите мне, что не так

1 Ответ

1 голос
/ 05 марта 2019

Отправка WM_LBUTTONDBLCLK на произвольный дескриптор окна или на рабочий стол не будет имитировать щелчок мыши.

Однако вы можете использовать SendInput, который может имитировать щелчок мышью по заданным координатам экрана (не дескриптор окна, не координаты окна или клиента). Этот код будет имитировать щелчок левой кнопкой мыши в текущей позиции курсора:

INPUT in[2]; // 0 = left dn, 1 = left up
ZeroMemory(in, sizeof(INPUT) * 2);

in[0].type = INPUT_MOUSE;
in[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;

in[1].type = INPUT_MOUSE;
in[1].mi.dwFlags = MOUSEEVENTF_LEFTUP;

SendInput(2, in, sizeof(INPUT));

Обратите внимание, что вы также можете использовать mouse_event, но SendInput предпочтительнее в соответствии с официальной документацией на MSDN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...