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() で仮想キー コードを使用することを考えましたが、完了できません。

このようなことを達成する方法についてのアイデア。

前もって感謝します。

4

1 に答える 1

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...
                }
于 2012-04-20T20:25:47.723 に答える