2011-06-02 53 views
5

我想創建一個簡單的應用程序,它具有發送鍵(如快捷鍵)。這種情況是,只要創建的應用程序處於非活動狀態窗口,只要系統正在運行,系統仍會識別用戶的按鍵。使用C#的快捷鍵

總之,這是單純的喜歡按(窗口+ d)立即顯示桌面時是什麼應用程序/窗口是你進來。

誰能幫助我我如何能做到這一點在C#2005

+5

檢查你的熱鍵的比賽你能通過你的其他問題,並看到標記任何正確幫助你的答案,如接受的答案(剔)。這將代表那些幫助你和你自己的人,這會鼓勵其他人提供幫助。 – 2011-06-02 05:38:28

回答

5

使用以下命令:

[DllImport("user32.dll")] 
private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk); 
[DllImport("user32.dll")] 
private static extern bool UnregisterHotKey(IntPtr hWnd, int id); 

[Flags] 
public enum ModifierKeys : uint 
{ 
    Alt = 1, 
    Control = 2, 
    Shift = 4, 
    Win = 8 
} 

private ModifierKeys _getModifierKeys(bool isAlt, bool isCtrl, bool isShift, bool isWin) 
{ 
    return (isAlt ? ModifierKeys.Alt : 0) | 
      (isCtrl ? ModifierKeys.Control : 0) | 
      (isShift ? ModifierKeys.Shift : 0) | 
      (isWin ? ModifierKeys.Win : 0); 
} 

然後,註冊您的熱鍵,

RegisterHotKey(hWndNotify, id, 
        (uint)_getModifierKeys(_isAlt, _isCtrl, _isShift, _isWin), 
        (uint)_key); 
在主機的hWnd

,聽WM_HOTKEYREADY,然後使用

public bool Matches(ref Message m) 
{ 
    Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF); 
    ModifierKeys modifier = (ModifierKeys)((int)m.LParam & 0xFFFF); 

    if ((key == Key) && 
     (modifier == Modifier)) 
    { 
     return true; 
    } 

    return false; 
}