7

到目前为止,我已经设置了所有的句柄捕获和 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。

谢谢,如果你能帮忙!

4

2 回答 2

9

要模拟按键,您需要模拟 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
于 2011-04-12T22:46:31.733 回答
1

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 值。

于 2011-04-12T22:32:15.643 回答