1

コンソール mfc アプリである Visual Studio 11 (ベータ版) で小さなプログラムを作成しています。私はこれまでこの環境用にプログラミングしたことがなく、コンソールでエスケープキーの押下を検出する方法を見つけようとしています。私はオンラインリソースを広範囲に調べ、さまざまなことを試しましたが、それを理解できません.

これは、私がそれを機能させることができるかどうかを確認しようとしていたものです。

printf("Press Escape to exit.");
bool maxReached = true;
while (maxReached)
{
    if(WM_COMMAND == IDCANCEL) // Tried many different things here, like WM_KEYDOWN == VK_ESCAPE. no luck
    {
        maxReached = false;
    }
}
exit(-1);

どんな助けでも大歓迎です。

カマル

4

2 に答える 2

2

いつでもキーボードフックを取り付けて、ESCキーが押されているかどうかを確認できます。
方法は次のとおりです。

まず、フックを取り付けます

HHOOK hhkLowLevelKybd;    
HINSTANCE hInstance = GetModuleHandle(NULL);

// Install the low-level keyboard hook
hhkLowLevelKybd  = SetWindowsHookEx(WH_KEYBOARD_LL,
                LowLevelKeyboardProc,
                hInstance,
                NULL );

次に、LowLevelKeyboardProcにESCキーアップに応答してルーチンを実行させます。

_declspec(dllexport) LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION)
    {
         PKBDLLHOOKSTRUCT p = ( PKBDLLHOOKSTRUCT ) lParam;
         switch (wParam)
         {
            case WM_KEYUP:
            case WM_SYSKEYUP:
                switch (p->vkCode)
                {
                   case 0x1B: //OR VK_ESCAPE
                       maxReached = false;
                       break;
                   default:
                       break;
                }
                break;
            default:
                break;
         }
     }
     return(CallNextHookEx( NULL, nCode, wParam, lParam ));
}
于 2012-04-07T16:08:52.387 に答える
2

を使用して検出できます

if (getch() == 0x1B) // escape detected
{
  maxReached = false;
}
于 2012-04-06T22:42:36.600 に答える