我需要与运行的外部应用程序进行交互,并发送特定的按键和释放。我尝试使用SendKeys类,但它只完成了一半的工作,因为按键是立即释放到外部应用程序中的。
我需要能够模拟外部应用程序的“按键按下”。现在我正在尝试使用SendMessage,但目前它根本不起作用:(,我甚至没有收到错误提示。
我需要与运行的外部应用程序进行交互,并发送特定的按键和释放。我尝试使用SendKeys类,但它只完成了一半的工作,因为按键是立即释放到外部应用程序中的。
我需要能够模拟外部应用程序的“按键按下”。现在我正在尝试使用SendMessage,但目前它根本不起作用:(,我甚至没有收到错误提示。
好的,问题解决了。我实际上安装了VC++来尝试核心keybd_event()函数,在它成功工作后,我能够在C#中明智地使用它。
这里是代码,令人惊讶的是它非常简单。您需要添加此代码以导入dlls: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_KEYUP
吗?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);
IWshRuntimeLibrary
中。SendInput
。