2012-01-20 42 views
1

我在我的應用程序使用設置多個熱鍵registerHotKey登記在應用程序的多個熱鍵使用RegisterHotKey

Win32.RegisterHotKey(hWndSource.Handle, add, Win32.MOD_CONTROL | Win32.MOD_SHIFT, Win32.VK_KEY_D); 
Win32.RegisterHotKey(hWndSource.Handle, manage, Win32.MOD_CONTROL | Win32.MOD_SHIFT, Win32.VK_KEY_M); 

這是所有發現和花花公子,但我很困惑與我應該如何捕捉每一個。這裏是熱鍵被按下時發生的過程:

private IntPtr MainWindowProcCatchManageHotkey(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
    { 
     switch (msg) 
     { 
      case Win32.WM_HOTKEY: 
       if (wParam == (IntPtr)(-16285)) 
       { 
        CaptureManageHotkey(); 
       } 
       if (wParam == (IntPtr)(-16303)) 
       { 
        CaptureSelection(); 
       } 
       handled = true; 
       break; 
     } 

     return IntPtr.Zero; 
    } 

這是相當貧民窟。它從我測試過的小型計算機上運行,​​但是如果沒有對發生的事情有更好的理解,我不願意推它。我知道測試wParam的哪些值的唯一原因是我運行了調試器並設置了一個斷點,以便我可以看到傳入該函數的內容。有沒有什麼地方可以查看我的情況下lParam和wParam的值?我想抓住ctrl + shift + d作爲一個,而按Ctrl + shift + m作爲另一個。我在哪裏可以看到這些lParam和wParam應該是什麼?

tl; dr我怎麼知道lParam和wParam我想查找什麼值?

回答

3

wParam值是您在調用RegisterHotKey時通過的id值。在這種情況下,它們是值addmanage

lParam值包含實際按下的組合鍵。

低位字指定要與高位字所指定的鍵結合使用以生成WM_HOTKEY消息的鍵。

這一切都在WM_HOTKEY的MSDN主題中解釋。

+0

這工作!正如我懷疑的那樣,當我切換電腦並開始再次運行代碼時,原始帖子中wParam的值發生了變化。使用'添加'和'管理'雖然在兩臺電腦上工作! – james

相關問題