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

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

我需要能够模拟外部应用程序的“按键按下”。 我现在正在尝试使用SendMessage的东西,但是现在它根本不起作用:(我甚至都没有得到错误。

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

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

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

(代码突出显示搞砸了:/,从’命名空间…’复制到最后一个括号’}’)

namespace ConsoleApplication1 { class Program { [DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags,UIntPtr dwExtraInfo); 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); } } } } 

你尝试使用PostMessage发送WM_KEYDOWNWM_KEYUP吗?

编辑

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

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

官方API是SendInput

您可以使用WSH Scripting Shell执行此操作:

  WshShell shell = new WshShellClass(); object missing=System.Reflection.Missing.Value; shell.SendKeys("MOO!!!", ref missing); 

您需要做的就是向“Windows Scripting Host Object”1.0版添加COM引用。 一切都在命名空间IWshRuntimeLibrary