2012-04-20 56 views
2

此代碼打印出輸入按鈕後按下的用戶類型。瞭解用戶按下向上/向下箭頭

main() 
{ 

HANDLE   stdinInput = 0; 
DWORD   numEvents = 0; 
DWORD   numEventsRead = 0; 
DWORD   numReceivedRecords = 0; 
DWORD   fdwSaveOldMode; 
DWORD   fdwMode; 


char dataBuffer[100]; 
int bufferLen = 0; 


stdinInput = GetStdHandle(STD_INPUT_HANDLE); 

if (stdinInput == INVALID_HANDLE_VALUE) 
     perror("GetStdHandle"); 

if (! GetConsoleMode(stdinInput, &fdwSaveOldMode)) 
     perror("GetConsoleMode"); 

fdwMode = ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT; 
if (! SetConsoleMode(stdinInput, fdwMode)) 
     perror("SetConsoleMode"); 


for(; ;) 
{ 


    GetNumberOfConsoleInputEvents(stdinInput, &numEvents); 

    if (numEvents != 0) { 

     INPUT_RECORD eventBuffer; 

     ReadConsoleInputA(stdinInput, &eventBuffer, 1, &numEventsRead); 


     if (eventBuffer.EventType == KEY_EVENT) { 

      if(eventBuffer.Event.KeyEvent.bKeyDown) 
      { 
       if(eventBuffer.Event.KeyEvent.uChar.UnicodeChar != 0) 
       { 
        printf("%c",eventBuffer.Event.KeyEvent.uChar.UnicodeChar); 
        dataBuffer[bufferLen++] = eventBuffer.Event.KeyEvent.uChar.UnicodeChar; 
        dataBuffer[bufferLen] = '\0';    

        if (dataBuffer[bufferLen] == 99 || eventBuffer.Event.KeyEvent.uChar.UnicodeChar == '\r') { 
        printf("User Wrote: %s\n",dataBuffer); 

        memset(dataBuffer,0,sizeof(dataBuffer)); 
        bufferLen = 0; 
        } 
       } 


      } 
     } 

    } 
} 

} 

現在我想使當用戶按下向上/向下箭頭它檢測並打印出「向上/向下箭頭按下」無需按Enter鍵。

被認爲使用虛擬鍵代碼與GetKeyState(),但無法完成它。

關於如何實現這樣的事情的任何想法。

在此先感謝。

回答

1

注意虛擬鍵碼。像這樣:

if (eventBuffer.EventType == KEY_EVENT) { 
     if(eventBuffer.Event.KeyEvent.bKeyDown) { 
      switch (eventBuffer.Event.KeyEvent.wVirtualKeyCode) { 
       case VK_DOWN: printf("Down arrow pressed\n"); break; 
       case VK_UP: printf("Up arrow pressed\n"); break; 
       default: { 
        // Rest of your code... 
       } 
+0

謝謝你的工作。 – 2012-04-21 17:35:36

相關問題