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

时间:2009-11-21 23:45:40

标签: c# keyboard sendmessage

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

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

4 个答案:

答案 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_KEYDOWNWM_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