忽略鼠标单击并将键盘输入发送到外部应用程序

本文关键字:外部 应用程序 输入 键盘 鼠标 单击 | 更新日期: 2023-09-27 18:34:21

如何在旧程序中单击鼠标时模拟击键。注意!程序可能不知道鼠标被点击了

我正在试验

 IntPtr module = LoadLibrary("user32.dll");
 _mouseHookHandle = (HookType.MouseLowLevel, _mouseDelegate, module, 0);

并测试从HookProc返回 -1 .但是当我这样做时,SendInput不会将我的输入发送到应用程序。如果我从 CallNextHookEx 返回结果,SendInput工作,但随后鼠标单击被发送到旧版应用程序。

背景

我们有一个用特殊键盘控制的程序。当按下键盘上的键时,它会发送一系列 ESC 和字母。然后,程序根据鼠标在屏幕上的位置执行操作。

我正在开发一种屏幕键盘,以便您可以在没有此特殊键盘的情况下控制应用程序。用户使用鼠标选择屏幕键盘上的按钮。然后,用户将鼠标指针移动到他要将突击队发送到的对象,然后再次单击。但也就是说,鼠标点击可能不会传递给程序,程序在鼠标点击时执行另一个操作。

忽略鼠标单击并将键盘输入发送到外部应用程序

作为可能的方法之一,您可以使用简单的 SendMessage 将任何窗口消息直接发送到目标窗口。它可以与外部应用程序的窗口一起使用。(但您需要找到目标窗口的句柄才能使用此功能(。通过这种方式,您也可以发送任何键盘和鼠标事件。

忽略鼠标事件更加困难。您需要对该窗口进行子类化,即附加您自己的自定义窗口过程来过滤窗口消息。为此,您需要将 DLL 注入受控进程。
整体任务非常复杂,它不是您可以复制粘贴的简单代码片段。

如果我了解你之后是什么,那么你可以通过 MouseClick 事件上的代码或使用 System.Windows.Form.SendKeys -> Send({KeyBoardKey}( 的一些脚本来发送密钥

文档 : http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send.aspx

如果您的屏幕键盘应用程序是旧版应用程序的独立进程,那么它应该相当容易。

在键盘应用中,你知道用户单击了哪个键。因此,您所要做的就是使用 SendMessage(( API 将此信息传递给旧版应用程序。

你说物理键盘发送ESC和字母?因此,您需要某种键盘键查找表来命令序列。

此外,您还需要获取遗留应用程序的 HWND,您可以使用 FindWindow((/FindWindowEx(( API 来完成。我假设该应用程序将具有唯一的自定义类名称,这应该使这变得容易。

有关如何使用 SendMessage(( 发送命令序列字符的详细信息,请参阅此处:

使用"发送消息"发送应用程序击键 (vb.net(