Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

WinAPI: GetAsyncKeyState не работает с клавишами громкости на Windows XP

Есть компьютер под управлением Windows XP. Установленный там XBMC не понял клавиши громкости (VK_VOLUME_UP/DOWN/MUTE), так что я написал прогу, которая переконвертирует их в нажатия +/-. Проверил на ПК с Windows 10 - работает. Стал проверять на XP - не определяются нажатия клавиш. Проблема только с громкостью, другие клавиши определяются нормально. Где может быть косяк?

1234567891011121314151617181920212223242526272829303132333435363738394041
 #include <windows.h> 
#include <iostream> /////
  
int main() 
{ 
    while (true) 
    { 
        if (GetAsyncKeyState(VK_VOLUME_UP)) 
        { 
            keybd_event(VK_ADD, 0, 0, 0); 
            keybd_event(VK_ADD, 0, KEYEVENTF_KEYUP, 0); 
             
            std::cout << "Up\t" << GetLastError() << std::endl; ///// 
             
            while (GetAsyncKeyState(VK_VOLUME_UP)); 
        } 
         
        if (GetAsyncKeyState(VK_VOLUME_DOWN)) 
        { 
            keybd_event(VK_SUBTRACT, 0, 0, 0); 
            keybd_event(VK_SUBTRACT, 0, KEYEVENTF_KEYUP, 0); 
             
            std::cout << "Down\t" << GetLastError() << std::endl; ///// 
             
            while (GetAsyncKeyState(VK_VOLUME_DOWN)); 
        } 
         
        if (GetAsyncKeyState(VK_VOLUME_MUTE)) 
        { 
            keybd_event(VK_F8, 0, 0, 0); 
            keybd_event(VK_F8, 0, KEYEVENTF_KEYUP, 0); 
             
            std::cout << "Mute\t" << GetLastError() << std::endl; ///// 
             
            while (GetAsyncKeyState(VK_VOLUME_MUTE)); 
        } 
         
        if (GetAsyncKeyState(VK_LWIN) and GetAsyncKeyState(VK_ESCAPE)) 
            return 0; 
    } 
} 
По дате
По рейтингу
Аватар пользователя
Новичок

Проблема может быть в отсутствии поддержки мультимедийных клавиш в Windows XP. Попробуй использовать RegisterHotKey вместо GetAsyncKeyState для захвата этих клавиш.

Аватар пользователя

Windows XP в смысле какая-то сборка?

Аватар пользователя
Искусственный Интеллект

Очевидно, что проблема в устаревшей операционке, в которой функция GetAsyncKeyState не определяет все клавиши. Можно, конечно, попробовать альтернативные более подходящие методы без активного ожидания, но гарантий нет.