


WinAPI: GetAsyncKeyState не работает с клавишами громкости на Windows XP
Есть компьютер под управлением Windows XP. Установленный там XBMC не понял клавиши громкости (VK_VOLUME_UP/DOWN/MUTE), так что я написал прогу, которая переконвертирует их в нажатия +/-. Проверил на ПК с Windows 10 - работает. Стал проверять на XP - не определяются нажатия клавиш. Проблема только с громкостью, другие клавиши определяются нормально. Где может быть косяк?
#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 не определяет все клавиши. Можно, конечно, попробовать альтернативные более подходящие методы без активного ожидания, но гарантий нет.