1

私はwinapiを使用してWin32アプリケーションに取り組んでおり、アプリケーションがフォーカスされていない/ウィンドウがないときにキーボードイベントを受け取る方法があるかどうかに興味があります.

もともと私はアプリケーション メッセージ キューを読み取ってメッセージをチェックしていましたが、WM_KEYDOWNメッセージはウィンドウがフォーカスされている間だけアプリケーションに送信されます。DirectInput を使用できることは承知していますが、可能であれば、アプリケーションに DirectX を要求することは避けたいと考えています。

DirectInput を使用する以外に、ウィンドウがフォーカスされていないときにキーボードの押下を受け取る方法はありますか?

編集:いいえ、あなたが尋ねる前に、私はキーロガーを書いていません. アプリケーションは、バックグラウンドで特定の再バインド可能なキーボード ショートカットに応答する必要があります。

4

4 に答える 4

1

このような動作を実現する最善の方法は、キーボードをフックすることです。

これは、基本を説明する便利なチュートリアルです。codeguru
また、フック タイプをシステム全体プロセス固有に区別します。

于 2013-08-01T18:07:50.923 に答える
0

後で編集: ウィンドウがフォーカスされていない場合、無視されWM_KEYDOWNてもメッセージを処理できません。WM_KILLFOCUSしたがって、定期的かつ個別にチェックする必要がありますGetAsyncKeyState()

アプリがフォーカスから外れないようWM_KILLFOCUSに、メッセージの をバイパスできます。WndProc()キーを押しても処理できます。

何かのようなもの:

LRESULT CALLBACK WndProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam)
{

    switch (msg)
    {

    /* cases blah blah */

    case WM_KILLFOCUS:
        return 0;

    /* other cases' blah blah */

    }
    return DefWindowProc(hWindow, msg, wParam, lParam);
}
于 2013-08-01T18:10:55.107 に答える