Отправка клавиш приложения с помощью "SendMessage" (vb.net)

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

У меня есть этот код:

SendMessage(New IntPtr(CurrentHandle), WHAT,GOES,HERE?)

Я смотрю на: http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx и http://msdn.microsoft.com/en-us/library/ms644927(v=VS.85).aspx

Однако, ни один из них не дает большую часть метода "примера кода", который мне нужен, чтобы узнать, как это сделать. Мне просто нужно отправить ключевые события, такие как нажатие "/" или "w" и т. Д. Нет, я не могу использовать sendkeys для этого.

Спасибо, если вы можете помочь!

2 ответа

Решение

Чтобы имитировать нажатие клавиш, вам нужно будет смоделировать событие keydown и keyup, которое будет тем, что вы укажете в поле Msg. (Используйте 256 для keydown и 257 для keyup). wParam и lParam относятся к конкретному сообщению, поэтому для keyup и keydown wParam будет ключевым кодом (шестнадцатеричные коды см. на этой странице), а lParam содержит другую разную информацию ( см. эту страницу). В vb.net вы можете использовать int32 для lParam. Например, вы можете использовать 0 для keydown и 65539 для keyup.

Пример:

SendMessage(New IntPtr(CurrentHandle), 256, KEYCODE, 0) - Keydown
SendMessage(New IntPtr(CurrentHandle), 257, KEYCODE, 65539) - Keyup

http://msdn.microsoft.com/en-us/library/ms644950(v=vs.85).aspx

LRESULT WINAPI SendMessage(
  __in  HWND hWnd,
  __in  UINT Msg,
  __in  WPARAM wParam,
  __in  LPARAM lParam
);

hWnd - дескриптор окна для отправки сообщения. Msg - тип сообщения для отправки. WParam и lParam по сути являются "информацией". Точное использование будет зависеть от сообщения, которое вы отправляете.

В какой ситуации вам нужно использовать SendMessage вместо SendKeys для эмуляции нажатий клавиш? Я использовал SendMessage раньше, но это всегда было для движений мыши. .SendKeys() должен отправлять любое нажатие клавиши в активное окно.

Public Shared Sub ActivateWin()
    Dim Win As Process = Process.GetProcessesByName("myWindow").First
    AppActivate(Win.Id)
End Sub

Я использовал вышеизложенное непосредственно перед SendKeys (), и это всегда работало.

Если это не работает, или вы хотите использовать SendMessage ради использования SendMessage; документация для сообщения WM_KEYDOWN - это то, что вам нужно. http://msdn.microsoft.com/en-us/library/ms646280(v=vs.85).aspx

Вы будете манипулировать битами, чтобы создать правильное значение lParam.

Другие вопросы по тегам