使用“SendMessage”(vb.net)发送应用程序击键

时间:2011-04-12 21:31:19

标签: vb.net sendmessage keystrokes

到目前为止,我已经完成了所有句柄捕获和gui设置。我很难过如何执行实际步骤。

我有这段代码:

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

我一直在看: http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspxhttp://msdn.microsoft.com/en-us/library/ms644927(v=VS.85).aspx#system_defined

但是,这些都没有提供我需要学习如何操作的“代码示例”方法。我只需要发送关键事件,如按“/”或“w”等。不,我不能使用sendkeys。

谢谢,如果你能提供帮助!

2 个答案:

答案 0 :(得分:9)

要模拟按键,您需要模拟keydown和keyup事件,这将是您在Msg字段中指定的事件。 (对于keydown使用256,对于keyup使用257)。 wParam和lParam是特定于消息的,因此对于keyup和keydown,wParam将是密钥代码(十六进制代码的See this page),而lParam包含其他杂项信息(see this page)。在vb.net中,您可以将int32用于lParam。例如,您可以将0用于keydown,将65539用于keyup。

例如:

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

答案 1 :(得分: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 - 是发送消息的窗口的句柄。 消息 - 是要发送的消息类型。 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值。