powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Моделирование шифт-клика
2 сообщений из 2, страница 1 из 1
Моделирование шифт-клика
    #33641700
Всем доброе время суток!

Я пишу программу, управляющую открытыми окнами и имитирующую для них действия пользователя. Для моделирования нажатий клавиш на клавиатуре и мышке, а также передвижений курсора использую PostMessage(Hwnd, Msg, wParam, lParam) для мыши и SendMessage(Hwnd, Msg, wParam, lParam) для клавиатуры.
Проблема возникает в том случае, если мне необходимо смоделировать шифт-клик на окне, например для выделения текста в текстовом редакторе.
При захвате сообщений при реальном нажатии shift и клике Spy++ пишет что получены множественные сообщения о нажатии shift и о том, что сообщения, относящиеся к кликам мышки идут с флагом MK_SHIFT.
Однако, отсылая такие сообщения, а именно:

PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON | MK_SHIFT, (int)((y<<16)|x));

и

PostMessage(hWnd, WM_LBUTTONUP, MK_SHIFT, (int)((y<<16)|x));

Попеременно с

SendMessage(hWnd,WM_KEYDOWN,VK_SHIFT,1);

Результатов не дает - производится обычный клик, без шифта. В хелпе по WM_KEYDOWN относительно удержания клавиш и соответствующих сообщений сказано:

lParam
Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table.
0-15
Specifies the repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.
16-23
Specifies the scan code. The value depends on the OEM.
24
Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28
Reserved; do not use.
29
Specifies the context code. The value is always 0 for a WM_KEYDOWN message.
30
Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is zero if the key is up.
31
Specifies the transition state. The value is always zero for a WM_KEYDOWN message.

Верно ли я понимаю, что для моделирования продолжительного нажатия шифта и клика в это время нужно употреблять следующий код:

SendMessage(hWnd,WM_KEYDOWN,VK_SHIFT,1);
PostMessage(hWnd, WM_MOUSEMOVE, MK_SHIFT, (int)((y<<16)|x));
SendMessage(hWnd,WM_KEYDOWN,VK_SHIFT,((unsigned long)(2)) | ((unsigned long)(1) << 30));
PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON | MK_SHIFT, (int)((y<<16)|x));
SendMessage(hWnd,WM_KEYDOWN,VK_SHIFT,((unsigned long)(3)) | ((unsigned long)(1) << 30));
PostMessage(hWnd, WM_MOUSEMOVE, MK_LBUTTON | MK_SHIFT, (int)((y<<16)|x));
SendMessage(hWnd,WM_KEYDOWN,VK_SHIFT,((unsigned long)(4)) | ((unsigned long)(1) << 30));
PostMessage(hWnd, WM_LBUTTONUP, MK_SHIFT, (int)((y<<16)|x));
SendMessage(hWnd,WM_KEYDOWN,VK_SHIFT,((unsigned long)(5)) | ((unsigned long)(1) << 30));
PostMessage(hWnd, WM_MOUSEMOVE, MK_SHIFT, (int)((y<<16)|x));
SendMessage(hWnd,WM_KEYDOWN,VK_SHIFT,((unsigned long)(6)) | ((unsigned long)(1) << 30));
SendMessage(hWnd,WM_KEYUP,VK_SHIFT,((unsigned long)(1)) | ((unsigned long)(1) << 30) | ((unsigned long)(1) << 31)));

где х и у - координаты точки в окне, куда идет клик, а hWnd - хендл окна, куда шлется шифт клик? Может быть кто-то сталкивался с подобной проблемой? Буду рад любым рекомендациям!
...
Рейтинг: 0 / 0
Моделирование шифт-клика
    #33641949
road_run
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Превед!
В cpp коде рулез содержатся ответы на все вопросы сын мой.
Пога!
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Моделирование шифт-клика
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]