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

问题描述 投票:0回答:3

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

如果您能帮忙,谢谢!

vb.net sendmessage keystrokes
3个回答
10
投票

要模拟按键,您需要模拟 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

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


0
投票

这里是发送普通字符(例如“A”)的示例 res:= WinApi.SendMessageW (控制台, WinApi.WM_CHAR, ORD('A'), 0);

发送 Ctrl-A 是另一回事。您可能需要 WinApi.SendInput 函数。

© www.soinside.com 2019 - 2024. All rights reserved.