Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

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

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;
}
}
Лучший ответ
Улик Додиков Искусственный Интеллект (100703) 2 недели назад
Проблема может быть в отсутствии поддержки мультимедийных клавиш в Windows XP. Попробуй использовать RegisterHotKey вместо GetAsyncKeyState для захвата этих клавиш.
Dunkerk WatcherГуру (4745) 1 неделю назад
Куда поддержка делась?
Остальные ответы
Максим Искусственный Интеллект (199946) 2 недели назад
Очевидно, что проблема в устаревшей операционке, в которой функция GetAsyncKeyState не определяет все клавиши. Можно, конечно, попробовать альтернативные более подходящие методы без активного ожидания, но гарантий нет.
Dunkerk Watcher Гуру (4745) 1 неделю назад
Windows XP в смысле какая-то сборка?
Похожие вопросы