2012-06-11 38 views
4

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

+0

你在计划某种键盘记录? – saluce

+0

“不起作用”不是一个合适的问题描述。完全适用于无法支付的付费客户,对于可能花20秒复制/粘贴他的代码的程序员来说完全不合适。 –

+0

@saluce:全球键盘钩子有很多合法的原因(当然还有非法的)。 –

回答

12

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

下面是完整的,工作代码:

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

您创建一个控制台应用程序,但必须在参考System.Windows.Forms的这个工作补充。控制台应用程序没有理由不能引用该dll。

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

EDIT

主线程将运行Application.Run(),直到应用程序退出,例如通过调用Application.Exit()。做其他工作最简单的方法是开始一个新的任务来执行这项工作。下面是来自链接的代码,这是否

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); 
} 

可能提供退出控制台应用例如一个装置的Main()的修改后的版本当一个特殊的组合键被按下时,取决于您的具体需求。在

+0

为什么downvote?它回答了这个问题并经过验证可以正常工作。 –

+0

感谢这是完美的 – Oztaco

+0

应用程序卡在Application.Run()行。我如何将这个功能集成到现有的控制台应用程序中,而无需等到按键敲击? –

相关问题