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

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

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

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#system_defined

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

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

2 ответов


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

Ex:

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=против 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=против 85).aspx

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