2012-04-06 55 views
0

我正在編寫一個控制檯mfc應用程序的Visual Studio 11(beta)中的小程序。我從來沒有爲這個環境編寫過程,我試圖弄清楚如何檢測控制檯中的Escape鍵。我已經廣泛地查看了在線資源,並嘗試了許多不同的東西無法弄清楚。在控制檯mfc程序中檢測到escape keypress

以下是我正在試圖查看是否可以使其正常工作。

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); 

任何幫助將不勝感激。

卡邁勒

回答

1

您可以檢測使用

if (getch() == 0x1B) // escape detected 
{ 
    maxReached = false; 
} 
+0

感謝埃德。您的解決方案只需簡單修改 必須: 的#include和殘培代替 ()使用 _getch() – Kamal 2012-04-09 15:07:59

+0

@Kamal很好聽這個工作是一個簡單的方法,通常用於退出命令控制檯應用程序。 – EdChum 2012-04-09 15:30:22

1

你總是可以安裝一個鍵盤鉤子和檢查按下ESC鍵。
方法如下:

首先,安裝鉤子

HHOOK hhkLowLevelKybd;  
HINSTANCE hInstance = GetModuleHandle(NULL); 

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

接下來,已經LowLevelKeyboardProc響應ESC KEYUP執行你的套路:

_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)); 
} 
+0

感謝您的回覆,Baderous。我正在尋找更簡單的解決方案。 – Kamal 2012-04-09 15:10:32