1

我正在 Visual Studio 11 (beta) 中编写一个控制台 mfc 应用程序的小程序。我以前从未为这种环境编程过,我正试图弄清楚如何检测控制台中的 Escape 键按下。我已经广泛地查看了在线资源并尝试了许多不同的东西,但无法弄清楚。

这是我试图看看我是否能让它工作的东西。

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

您可以检测使用

if (getch() == 0x1B) // escape detected
{
  maxReached = false;
}
于 2012-04-06T22:42:36.600 回答
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 回答