2009-11-30 100 views
15

我已经能够设置本地热键这样WIN32 API的全局热键?

RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S'); 

如何设置热键是全球性的?即使当我的窗户隐藏时,我也希望它在那里。

+2

我一直在写Windows应用程序近20年,我不知道这个API调用存在 - 所以吨hank和+1。 :) – Rob 2009-11-30 21:46:57

回答

11

我解决了它自己,但感谢您的回复 这里就是错了...

ShowWindow(hwndDlg, SW_HIDE); 
RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S'); 

如果您先注册热键则隐藏窗口...它忽略了某些原因热键..哦,恩..它的工作现在:)

+1

很酷。所以它保证是全球性的? – Viet 2011-01-18 08:35:10

+0

是的,我认为这样:) – Mars 2011-01-20 15:42:06

5

不管你的窗口是否可见,都无关紧要。你不应该使用你打算破坏的hWnd(就像一个对话框)。如果您没有其他合适的窗口,请创建一个单独的(不可见的)窗口。

+2

我不摧毁它 我只是这样隐藏它 ShowWindow(hwndDlg,SW_HIDE); – Mars 2009-11-30 16:29:09

2

首先定义一个或多个常数为你的热键

#define HOTKEY1 1000 
#define HOTKEY2 1002 

然后你注册这些热键

RegisterHotKey(NULL, HOTKEY1, MOD_ALT + MOD_SHIFT, 0x53); // ALT+SHIFT+s 
RegisterHotKey(NULL, HOTKEY2, MOD_ALT + MOD_SHIFT, 0x51); // ALT+SHIFT+q 
中的重头戏

最后看你监视这些热键,并作出回应:

  if (msg.message == HOTKEY1) 
     { 
      switch (LOWORD(msg.wParam)) 
      { 
      case HOTKEY1: 
       // do such and such 
       break; 
      case HOTKEY2: 
       // do such and such 
       break 
      } 
     }