Имитация удержания клавиши

Я использую:

keybd_event(0x41, 0, 0, 0);

0x41 — это «а». Но это просто печатает одну букву «а» на экране. Мне нужно удерживать клавишу. И когда я звоню

keybd_event(0x41, 0, KEYEVENTF_KEYUP, 0);

он должен отпустить ключ.

Это возможно?


person Sugarel    schedule 01.06.2009    source источник
comment
вы пытаетесь имитировать пользователя, удерживающего клавишу «A», чтобы получить аааа ...?   -  person Sam Trost    schedule 01.06.2009
comment
Вы можете использовать таймер или цикл для непрерывного вызова keybd_event. Или, если вы знаете, на каком оборудовании вы собираетесь работать, вы можете загружать нажатия клавиш в буфер kb.   -  person Michael Todd    schedule 01.06.2009


Ответы (2)


Вы можете заменить вызов keybd_event на SendInput. Вы можете вставить столько событий нажатия клавиш, сколько позволит система событий. Функция возвращает количество успешно вставленных событий.

person Michael Kristofik    schedule 01.06.2009

Что вы пытаетесь достичь? Клавиши, которые должны оставаться нажатыми, уже должны делать это с вашей первой строкой.

Вот документация для keybd_event(). Возможно, это поможет ответить на ваш вопрос. (А может вам нужен был метод GetKeyboardState()?)

Если вы просто пытаетесь повторно нажать клавишу, будет проще зациклиться на первом вызове, чем пытаться заставить систему автоматически повторяться. Вы можете найти правильную задержку для использования в функциях API системной информации.

person John Fisher    schedule 01.06.2009
comment
Хм, хорошо. Хорошо надеялся, что смогу сделать это с помощью цикла/таймера. Но я думаю, что это сделает свое дело. - person Sugarel; 01.06.2009