我需要与正在运行的外部应用程序进行交互,并发送特定的按键和按键。版本。我已经尝试使用SendKeys类,但它只完成了一半的工作,因为keypress正在通过立即密钥释放发送到外部应用程序。
我需要能够模拟外部应用程序的“按键按下”。我现在正在尝试使用SendMessage的东西,但是现在它根本不起作用:(我甚至都没有错误。
答案 0 :(得分:3)
好的,案件已经解决了。我实际安装了VC ++来尝试核心keybd_event()函数,在它工作之后我能够在C#中使用它明智地。
这是代码,令人惊讶的是它非常简单。您需要将此用法添加到您的代码中才能导入dll:使用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);
}
}
}
}
答案 1 :(得分:1)
您是否尝试使用PostMessage发送WM_KEYDOWN
和WM_KEYUP
?
修改
您可以这样使用它(我用C ++编写,但您可以轻松使用PInvoke和..NET)
HWND hwnd = FindWindow(NULL,_T("Mywindow"));
PostMessage(hwnd,WM_KEYDOWN,VK_A,0);
答案 2 :(得分:1)
官方API为SendInput
。
答案 3 :(得分:1)
您可以使用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
。