Отправка клавиш приложения с помощью "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.