Нажатие и удержание нескольких клавиш
От: muller  
Дата: 13.01.04 07:38
Оценка:
Мне необходимо осуществить одновременное нажатие нескольких клавиш в окне другого процесса. Например, A+X или Alt+J и так далее. Трудность состоит в реализации параллельности нажатия клавиш, т.к. обработка GetMessaage b PeekMessage идет последовательно. Вот.
Буду признателен за подсказки...

13.01.04 15:23: Перенесено модератором из 'C/C++' — ПК
Re: Нажатие и удержание нескольких клавиш
От: Jakop Россия https://wmspanel.com
Дата: 16.01.04 07:33
Оценка:
Здравствуйте, muller, Вы писали:

M>Мне необходимо осуществить одновременное нажатие нескольких клавиш в окне другого процесса. Например, A+X или Alt+J и так далее. Трудность состоит в реализации параллельности нажатия клавиш, т.к. обработка GetMessaage b PeekMessage идет последовательно. Вот.

M>Буду признателен за подсказки...


Для начала нужно разобраться с относительностью одновременности....
Если создать простенькое оконное приложение Win32 и натравить на него Spy
можно ставить очень интересные опыты....
Например нажав и удерживая A & X(в нашем окне) мы получаем примерно следующее

WM_KEYDOWN A
WM_CHAR A
WM_KEYDOWN S
WM_CHAR S
WM_KEYDOWN S
WM_CHAR S
WM_KEYDOWN S
WM_CHAR S
WM_KEYDOWN S
WM_CHAR S
WM_KEYUP S
WM_KEYUP A

Простите что не перечислил все параметры (spy их копировать не дает)
Это к разговору об одновременности — одновременно ничего не происходит..


Если окно приложения определяет "одновременно" нажатые клавиши проверяя WM_KEYDOWN
и WM_KEYUP (так делается во всех играх:1)создается массив на WM_KEYDOWN срабатывает
key[wParam]=true а на WM_KEYUP key[wParam]=false 2)Все значения в key равные true —
это нажатые клавиши.....

Если твое окно проверяет это так, то CTRL+С будет выглядеть так
PostMessage(Windows,WM_KEYDOWN,0x11,0x1D0001);
PostMessage(Windows,WM_KEYDOWN,0x43,0x2E0001);
PostMessage(Windows,WM_KEYUP,0x43,0xC02E0001);
PostMessage(Windows,WM_KEYUP,0x11,0xC01D0001);













В некоторых программах(игровых в основном) одновре
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming

https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
Re[2]: Нажатие и удержание нескольких клавиш
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 17.01.04 12:34
Оценка:
Лучше использовать keybd_event (полная симуляция нажатия клавиши), потому что иначе глючат функции асинхронной проверки состояния клавиш (GetAsyncKeyState), которые анализируют не принятые сообщения, а состояние, отслеживаемое где-то на более низком уровне (где — не знаю, но думаю, что где-то повыше драйвера клавиатуры — иначе как бы симуляция это разруливала?).

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[3]: Нажатие и удержание нескольких клавиш
От: Jakop Россия https://wmspanel.com
Дата: 19.01.04 05:55
Оценка:
Здравствуйте, Slicer [Mirkwood], Вы писали:

SM>Лучше использовать keybd_event (полная симуляция нажатия клавиши), потому что иначе глючат функции асинхронной проверки состояния клавиш (GetAsyncKeyState), которые анализируют не принятые сообщения, а состояние, отслеживаемое где-то на более низком уровне (где — не знаю, но думаю, что где-то повыше драйвера клавиатуры — иначе как бы симуляция это разруливала?).


keybd_event — это не лучший вариант..Он эмулирует нажатие клавиши безотносительно
окна...Если в цикле эмуляции фокус передается другому окну случается беда
В одном из проэктов который мне передали на доработку, макросы были реализованы именно ч/з keybd_event...Устал разгребать.....
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming

https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
Re[4]: Нажатие и удержание нескольких клавиш
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 19.01.04 10:45
Оценка:
Везде свои минусы

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.