我需要与正在运行的外部应用程序交互,并发送特定的按键和释放。我尝试使用 SendKeys 类,但它只完成了一半的工作,因为按键被立即释放到外部应用程序。
我需要能够为外部应用程序模拟“按键”。我现在正在尝试使用 SendMessage 的东西,但现在它根本不起作用:(而且我什至没有收到错误。
我需要与正在运行的外部应用程序交互,并发送特定的按键和释放。我尝试使用 SendKeys 类,但它只完成了一半的工作,因为按键被立即释放到外部应用程序。
我需要能够为外部应用程序模拟“按键”。我现在正在尝试使用 SendMessage 的东西,但现在它根本不起作用:(而且我什至没有收到错误。
好的,案子解决了。我实际上安装了 VC++ 来尝试核心 keybd_event() 函数,在它工作之后,我能够在 C# 中明智地使用它。
这是代码,令人惊讶的是它非常简单。您需要将其添加到您的代码中才能导入 dll:using System.Runtime.InteropServices;
此代码将按住“1”按钮 3 秒钟,然后松开 1 秒钟并重复该过程。
(代码高亮搞砸了:/,从“命名空间...”复制到最后一个括号“}”)
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);
}
}
}
您是否尝试过使用PostMessage发送WM_KEYDOWN
和WM_KEYUP
?
编辑
你会这样使用它(我用 C++ 编写,但你可以轻松地使用PInvoke和 ..NET)
HWND hwnd = FindWindow(NULL,_T("Mywindow"));
PostMessage(hwnd,WM_KEYDOWN,VK_A,0);
您可以使用 WSH 脚本外壳来执行此操作:
var shell = new WshShellClass();
var missing = System.Reflection.Missing.Value;
shell.SendKeys("MOO!!!", ref missing);
您需要做的就是添加对“Windows 脚本宿主对象”版本 1.0 的 COM 引用。一切都在命名空间中IWshRuntimeLibrary
。
官方 API 是SendInput
.