2011-05-23 93 views
3

我設立在Windows全局快捷鍵,使用RegisterHotKey方法RegisterHotkey僅在Windows 7的工作,而不是在XP,Server 2003中

public static int MOD_CONTROL = 0x2; 
public static int WM_HOTKEY = 0x312; 

RegisterHotKey(this.Handle, 0, MOD_CONTROL | MOD_NOREPEAT, 96); 
// ctrl numpad0 

處理此代碼是:

[DllImport("user32.dll")] 
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);    

protected override void WndProc(ref Message m) 
    { 

     if (m.Msg == WM_HOTKEY)   
     { 
      MessageBox.Show("a hotkey is pressed"); //this also only shows in win7 

      if (m.WParam.ToInt32() == 0) //ctrl numpad0 
      { 
       MessageBox.Show("Hotkey ctrl numpad0 pressed"); 
       // works fine in win7 

      } 

     } 
     base.WndProc(ref m); 
    } 

在我的Windows 7 PC上可以正常工作,但是在XP或Windows Server 2003中並沒有。 任何想法出現錯誤?

+0

哇!從來不知道這個功能存在!這爲我節省了很多麻煩。 – IDWMaster 2011-05-23 21:15:06

回答

3

查看RegisterHotKey的文檔,它指出MOD_NOREPEAT標誌在Vista/XP/2K上不受支持。我懷疑這是你的問題。

你應該檢查返回值,它會立即告訴你有什麼問題。

+0

太好了,那就是訣竅! (對其不但不支持,而且打破了整個捷徑) – Arnoldiusss 2011-05-23 21:22:44

+0

@Arnoldiusss,那麼你必須檢查當前運行的Windows版本並使用'? :'或類似的 – Sebastian 2012-12-07 11:25:47

相關問題