2012-06-11 34 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()行。我如何將這個功能集成到現有的控制檯應用程序中,而無需等到按鍵敲擊? –

相關問題