2010-12-10 67 views
1

我需要編寫一個全局截取Alt + Shift + S的應用程序。如何在C#中實現全局熱鍵?

我做什麼是我創建了設置全局鉤子DLL:

namespace Hotkeydll 
{ 
    public class MyHotKey 
    { 
     public static void setHooks() 
     { 
      KeyboardHookProcedure = new HookProc(KeyboardHookProc); 
      hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); 
     } 

     private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) 
     { 
      //write something into file 
     } 


    } 
} 

然後我創建了加載這個DLL,並設置鉤子程序:

using Hotkeydll; 
namespace IWFHotkeyStarter 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyHotKey.setHooks(); 
     } 
    } 
} 

現在的問題是,熱鍵不起作用。

它看起來像DLL沒有永久加載到內存中。我看到我可以從文件系統中刪除該dll文件。

那麼請告訴我我做錯了什麼?

我應該用不同的方法嗎?

謝謝。

+0

什麼是您的PInvoke的代碼看起來像'SetWindowsHookEx' – SwDevMan81 2010-12-10 16:37:28

+1

這可能是有益的http://www.codeproject.com/KB/cs/globalhook.aspx – fardjad 2010-12-10 17:53:12

回答

1

您的Main()方法設置掛鉤,然後立即退出並終止程序。此外,你需要一個消息循環來使鉤子回調工作。這需要Windows窗體或WPF應用程序。現在使用真正的熱鍵而不是掛鉤也成爲一種選擇。例如,檢查this thread,C#在頁面的下方。

0

鍵盤掛鉤通常不是獲取全局熱鍵的正確方法。如果可能,使用RegisterHotkey

+0

笑,that's C++而不是C# – Paedow 2012-10-22 22:30:16

+0

@Paedow這Windows API。你需要使用擬合的p/invoke方法,但這並不困難。 – CodesInChaos 2012-10-23 06:38:50

+0

這就是我不擅長的事情,因爲我從未學過 – Paedow 2012-10-23 13:46:28