2009-11-30 35 views
15

tôi đã có thể thiết lập phím nóng cục bộ như thế nàyPhím nóng toàn cầu với WIN32 API?

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

Làm thế nào tôi có thể thiết lập phím nóng để được toàn cầu? Tôi muốn nó ở đó ngay cả khi cửa sổ của tôi bị ẩn.

+2

Tôi đã viết ứng dụng Windows trong gần 20 năm và tôi không biết cuộc gọi API này đã tồn tại - vì vậy, hanks và +1. :) – Rob

Trả lời

11

Tôi giải quyết nó bản thân mình nhưng nhờ trả lời của bạn đây là những gì đã sai ...

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

nếu bạn đăng ký các phím nóng đầu tiên sau đó ẩn cửa sổ ... nó bỏ qua các phím nóng cho một số lý do .. . oh well .. nó làm việc bây giờ :)

+1

Tuyệt. Vì vậy, nó được đảm bảo là toàn cầu? – Viet

+0

vâng tôi nghĩ vậy :) – Mars

5

Không quan trọng nếu cửa sổ của bạn có hiển thị hay không. Bạn không nên sử dụng một hWnd bạn có kế hoạch để destory (như một hộp thoại). Tạo một cửa sổ riêng (vô hình) nếu bạn không có cửa sổ phù hợp khác.

+2

Tôi không phá hủy nó Tôi chỉ ẩn nó như thế này ShowWindow (hwndDlg, SW_HIDE); – Mars

6

http://msdn.microsoft.com/ru-RU/library/windows/desktop/ms646309(v=vs.85).aspx

hWnd [trong, không bắt buộc]

Loại: HWND

< ...> Nếu tham số này là NULL, các thông điệp WM_HOTKEY được đăng vào hàng đợi thông điệp của tiểu trình đang gọi và phải được xử lý trong vòng lặp nhắn.

Đó là cách tốt hơn để đăng ký phím nóng toàn cầu.

2

Trước tiên, bạn xác định một hoặc nhiều hằng cho các phím nóng của bạn

#define HOTKEY1 1000 
#define HOTKEY2 1002 

Sau đó, bạn đăng ký các phím nóng

RegisterHotKey(NULL, HOTKEY1, MOD_ALT + MOD_SHIFT, 0x53); // ALT+SHIFT+s 
RegisterHotKey(NULL, HOTKEY2, MOD_ALT + MOD_SHIFT, 0x51); // ALT+SHIFT+q 

Cuối cùng trong trường hợp chính nhìn bạn theo dõi các phím nóng và trả lời họ:

  if (msg.message == HOTKEY1) 
     { 
      switch (LOWORD(msg.wParam)) 
      { 
      case HOTKEY1: 
       // do such and such 
       break; 
      case HOTKEY2: 
       // do such and such 
       break 
      } 
     } 
Các vấn đề liên quan