我需要与正在运行的外部应用程序进行交互,并发送特定的按键和发布。我尝试使用SendKeys类,但是它只完成一半的工作,因为按键是通过立即释放按键的方式发送到外部应用程序的。
我需要能够为外部应用程序模拟“按键按下”。我现在正在尝试使用SendMessage东西,但是现在它根本不起作用:(而且我什至都没有收到错误。
好,案例解决了。我实际上安装了VC ++来尝试核心的keybd_event()函数,并且在工作之后,我可以在C#中使用[[wisely。
这是代码,令人惊讶的是,它非常简单。您将需要使用将此添加到您的代码中,以便能够导入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);
}
}
}
WM_KEYDOWN
和WM_KEYDOWN
? 编辑
您将以这种方式使用它(我正在用C ++编写,但是您可以轻松使用WM_KEYUP
和..NET)
WM_KEYUP
您需要做的就是将COM引用添加到1.0版的“ Windows脚本宿主对象”。一切都在名称空间HWND hwnd = FindWindow(NULL,_T("Mywindow"));
PostMessage(hwnd,WM_KEYDOWN,VK_A,0);
中。
var shell = new WshShellClass();
var missing = System.Reflection.Missing.Value;
shell.SendKeys("MOO!!!", ref missing);
。