16

私はこのようなローカルホットキーを設定することができました

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

ホットキーをグローバルに設定するにはどうすればよいですか?窓が隠れていてもそこに置いておきたいです。

4

4 に答える 4

11

私はそれを自分で解決しましたが、あなたの返事に感謝しますここに何が間違っていたのですか...

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

最初にホットキーを登録してからウィンドウを非表示にすると...何らかの理由でホットキーが無視されます...まあ..今は機能しています:)

于 2009-11-30T16:33:38.880 に答える
7

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

hWnd [in、オプション]

タイプ:HWND

<...>このパラメータがNULLの場合、WM_HOTKEYメッセージは呼び出し元のスレッドのメッセージキューに送信され、メッセージループで処理する必要があります。

これは、グローバルホットキーを登録するためのより良い方法です。

于 2013-02-05T07:45:53.557 に答える
4

ウィンドウが表示されているかどうかは関係ありません。破棄する予定のhWnd(ダイアログなど)は使用しないでください。他に適切なウィンドウがない場合は、別の(非表示の)ウィンドウを作成します。

于 2009-11-30T16:27:26.723 に答える
3

まず、ホットキーの1つ以上の定数を定義します

#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
             }
         }
于 2017-07-08T12:06:05.380 に答える