1

CTRL+SHIFT+UPウィンドウがフォーカスされていない/アクティブでない場合でも、WinAPIでキーの組み合わせ()を処理する必要があります。

どうすればこれを行うことができますか(可能であれば、WinApiフックを使用しないソリューションをお勧めします)?

4

1 に答える 1

4

まず、「システム全体」のホットキーをRegisterHotKey関数に登録する必要があります。アプリケーションが最小化されている、フォーカスされていない、または非表示になっている場合でも機能します。

RegisterHotKey(hWnd, KEY_ID, MOD_CONTROL | MOD_SHIFT, VK_UP);
// check for errors, the function will fail if the hot key is already registered

hWndWM_HOTKEYメッセージを受信するウィンドウのハンドルです。KEY_IDホットキーの識別子です。MOD_CONTROL | MOD_SHIFTCtrl+Shiftの両方。VK_UP上矢印キーの場合。

次に、ウィンドウプロシージャでWM_HOTKEYメッセージを処理する必要があります。

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
        ...
        WM_HOTKEY:
        // handle the hot key here
        ...
    }
}

アプリケーションにウィンドウがなく、hWndNULLの場合は、メッセージループでWM_HOTKEYを処理する必要があります。

MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0) != 0)
{
    if (msg.message == WM_HOTKEY) {
        // handle the hot key here
    }
} 
于 2013-03-10T08:15:30.690 に答える