/** * 스캔 코드를 ASCII 코드로 변환 */ BOOL kConvertScanCodeToASCIICode( BYTE bScanCode, BYTE* pbASCIICode, BOOL* pbFlags ) { BOOL bUseCombinedKey; // 이전에 Pause 키가 수신되었다면, Pause의 남은 스캔 코드를 무시 if( gs_stKeyboardManager.iSkipCountForPause > 0 ) { gs_stKeyboardManager.iSkipCountForPause--; return FALSE; } // Pause 키는 특별히 처리 if( bScanCode == 0xE1 ) { *pbASCIICode = KEY_PAUSE; *pbFlags = KEY_FLAGS_DOWN; gs_stKeyboardManager.iSkipCountForPause = KEY_SKIPCOUNTFORPAUSE; return TRUE; } // 확장 키 코드가 들어왔을 때, 실제 키 값은 다음에 들어오므로 플래그 설정만 하고 종료 else if( bScanCode == 0xE0 ) { gs_stKeyboardManager.bExtendedCodeIn = TRUE; return FALSE; } // 조합된 키를 반환해야 하는가? bUseCombinedKey = kIsUseCombinedCode( bScanCode ); // 키 값 설정 if( bUseCombinedKey == TRUE ) { *pbASCIICode = gs_vstKeyMappingTable[ bScanCode & 0x7F ].bCombinedCode; } else { *pbASCIICode = gs_vstKeyMappingTable[ bScanCode & 0x7F ].bNormalCode; } // 확장 키 유무 설정 if( gs_stKeyboardManager.bExtendedCodeIn == TRUE ) { *pbFlags = KEY_FLAGS_EXTENDEDKEY; gs_stKeyboardManager.bExtendedCodeIn = FALSE; } else { *pbFlags = 0; } // 눌러짐 또는 떨어짐 유무 설정 if( ( bScanCode & 0x80 ) == 0 ) { *pbFlags |= KEY_FLAGS_DOWN; } // 조합 키 눌림 또는 떨어짐 상태를 갱신 UpdateCombinationKeyStatusAndLED( bScanCode ); return TRUE; }
BOOL kConvertScanCodeToASCIICode( BYTE bScanCode, BYTE* pbASCIICode, BOOL* pbFlags ) { BOOL bUseCombinedKey; // 이전에 PAUSE키가 수신되었다면 PAUSE의 남은 스캔코드 무시 if ( gs_stKeyboardManager.iSkipCountForPause > 0 ) { gs_stKeyboardManager.iSkipCountForPause--; return FALSE; } // PAUSE키는 특별히 처리 if (bScanCode == 0xE1) { *pbASCIICode = KEY_PAUSE; *pbFlags = KEY_FLAGS_DOWN; gs_stKeyboardManager.iSkipCountForPause = KEY_SKIPCOUNTFORPAUSE; return TRUE; } // 확장 키코드인경우 실제 키는 다음에 들어오므로 플래그 설정만 하고 종료 if (bScanCode == 0xE0) { gs_stKeyboardManager.bExtendedCodeIn = TRUE; return TRUE; } // 앞서 어떤 키보드인경우 신호를 주는 루틴은 처리 완료, 앞으로는 키 반환 루틴 bUseCombinedKey = kIsUseCombinedCode( bScanCode ); // 조합키인경우 if ( bUseCombinedKey == TRUE ) { *pbASCIICode = gs_vstKeyMappingTable[ bScanCode & 0x7F ].bCombinedCode; } else { *pbASCIICode = gs_vstKeyMappingTable[ bScanCode & 0x7F ].bNormalCode; } // 확장 키 유무 설정 if ( gs_stKeyboardManager.bExtendedCodeIn == TRUE ) { *pbFlags = KEY_FLAGS_EXTENDEDKEY; gs_stKeyboardManager.bExtendedCodeIn = FALSE; } else { *pbFlags = 0; } if( (bScanCode & 0x80) == 0 ) { *pbFlags |= KEY_FLAGS_DOWN; } UpdateCombinationKeyStatusAndLED( bScanCode ); return TRUE; }