在另一个应用程序中模拟按键和按键释放?

Posted

技术标签:

【中文标题】在另一个应用程序中模拟按键和按键释放?【英文标题】:Simulating a keypress AND keyrelease in another application? 【发布时间】:2009-11-21 23:45:40 【问题描述】:

我需要与正在运行的外部应用程序交互,并发送特定的按键和释放。我尝试使用 SendKeys 类,但它只完成了一半的工作,因为按键被立即释放到外部应用程序。

我需要能够为外部应用模拟“按住键”。我现在正在尝试使用 SendMessage 的东西,但现在它根本不起作用:(而且我什至没有收到错误。

【问题讨论】:

我认为 SendKeys 和 SendMessage 都不会满足您的要求。对不起,伙计,我也不知道。 在***.com/questions/172353/…查看我的回答 【参考方案1】:

好的,案子解决了。我实际上安装了 VC++ 来尝试核心 keybd_event() 函数,在它工作之后,我能够在 C# 中明智地使用它。

这是代码,令人惊讶的是它非常简单。您需要将此 using 添加到您的代码中才能导入 dll:using System.Runtime.InteropServices;

此代码将按住“1”按钮 3 秒钟,然后松开 1 秒钟并重复该过程。

(代码高亮搞砸了:/,从 'namespace ...' 复制到最后一个括号 '')

public class Program 
 
    [DllImport("user32.dll")] 
    private static extern void keybd_event(byte bVk, byte bScan, 
        uint dwFlags, UIntPtr dwExtraInfo);

    private static void Main(string[] args)
                
        while (true)
        
            keybd_event((byte)0x31, (byte)0x02, 0, UIntPtr.Zero);
            Thread.Sleep(3000);

            keybd_event((byte)0x31, (byte)0x82, (uint)0x2, UIntPtr.Zero);
            Thread.Sleep(1000);
        
    

【讨论】:

【参考方案2】:

您是否尝试过使用 PostMessage 发送 WM_KEYDOWNWM_KEYUP

编辑

您可以这样使用它(我使用 C++ 编写,但您可以轻松使用 PInvoke 和 ..NET)

HWND hwnd = FindWindow(NULL,_T("Mywindow"));
PostMessage(hwnd,WM_KEYDOWN,VK_A,0);

【讨论】:

你能给我看一段工作代码吗?我正在努力寻找 3 天的答案,除了 SendKeys 之外,没有任何东西可以远程工作 我添加了一个指向 pinvoke.net 的链接,您可以在其中找到给定函数的 PInvoke 标头 好的,我已经尝试调整您的解决方案并让它在 C# 中工作,我还从 Pinvoke 获得了标题(我想!)。它仍然不起作用,我觉得我正在递归我没有得到的东西......有人解释为什么 SendMessage 不起作用的任何机会,或者 PostMessage 的 C# 示例? 您能否发布您拥有的示例代码,并更好地描述您看到(或未)发生的事情与您期望发生的事情?【参考方案3】:

您可以使用 WSH 脚本外壳来执行此操作:

var shell   = new WshShellClass();
var missing = System.Reflection.Missing.Value;

shell.SendKeys("MOO!!!", ref missing);

您需要做的就是添加对“Windows 脚本宿主对象”版本 1.0 的 COM 引用。一切都在命名空间IWshRuntimeLibrary

【讨论】:

【参考方案4】:

官方API是SendInput

【讨论】:

我正在努力寻找一个可以工作的 C# 示例超过 3 天......我真的很感激其中之一。 谷歌搜索 C# "SendInput" 得到了这个:blogs.msdn.com/robgruen/archive/2004/05/10/129221.aspx

以上是关于在另一个应用程序中模拟按键和按键释放?的主要内容,如果未能解决你的问题,请参考以下文章

C ++:如果按下Windows,模拟按键并保持按键

selenium模拟多种键盘操作

selenium模拟多种键盘操作

VB模拟按键

从 Qt 应用程序内部模拟 TAB 或 SPACE 按键

Android模拟按键