到目前为止,我已经设置了所有句柄捕获和 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。
如果您能帮忙,谢谢!
要模拟按键,您需要模拟 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 值。
这里是发送普通字符(例如“A”)的示例 res:= WinApi.SendMessageW (控制台, WinApi.WM_CHAR, ORD('A'), 0);
发送 Ctrl-A 是另一回事。您可能需要 WinApi.SendInput 函数。