在控制台中捕获没有焦点的击键

时间:2012-06-11 22:07:51

标签: c# events console key

我知道Windows窗体有一个问题,但它在控制台中不起作用,或者至少我无法让它工作。即使控制台没有焦点,我也需要捕获按键

1 个答案:

答案 0 :(得分:14)

您也可以在控制台应用程序中创建全局键盘钩子。

这是完整的,有效的代码:

http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx

您创建了一个控制台应用程序,但必须添加对 System.Windows.Forms 的引用才能生效。控制台应用程序无法引用该DLL。

我刚刚使用此代码创建了控制台应用程序并验证了它是否按下每个键,无论控制台应用程序是否具有焦点。

修改

主线程将运行Application.Run()直到应用程序退出,例如通过调用Application.Exit()。做其他工作的最简单方法是启动一个新任务来执行该工作。以下是执行此操作的链接代码中Main()的修改版本

public static void Main()
{
    var doWork = Task.Run(() =>
        {
            for (int i = 0; i < 20; i++)
            {
                Console.WriteLine(i);
                Thread.Sleep(1000);
            }
            Application.Exit(); // Quick exit for demonstration only.  
        });

    _hookID = SetHook(_proc);

    Application.Run();

    UnhookWindowsHookEx(_hookID);
}

注意

可能提供退出控制台应用的方法,例如根据您的具体需要按下特殊键组合时。在