From 4b16039b2c08f3594e3de1f328969c0eefdaca3e Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Thu, 3 Apr 2014 17:26:11 +0000 Subject: fixed multimedia keys support under win32 git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4226 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/General/hotkey/hotkeymanager_win.cpp | 75 ++++++++++++++++-------- 1 file changed, 50 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/plugins/General/hotkey/hotkeymanager_win.cpp b/src/plugins/General/hotkey/hotkeymanager_win.cpp index b6b373010..c8d71ea9f 100644 --- a/src/plugins/General/hotkey/hotkeymanager_win.cpp +++ b/src/plugins/General/hotkey/hotkeymanager_win.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2013 by Ilya Kotov * + * Copyright (C) 2013-2014 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -40,20 +40,37 @@ static struct { unsigned int key; //virtual key unsigned long code; //scan code + QString name; } keyMap [] = { - { VK_LEFT, 0x14b }, - { VK_UP, 0x148 }, - { VK_RIGHT, 0x14d }, - { VK_DOWN, 0x150 }, - { VK_PRIOR, 0x149 }, - { VK_NEXT, 0x151 }, - { VK_END, 0x14F }, - { VK_HOME, 0x147 }, - { VK_INSERT, 0x152 }, - { VK_DELETE, 0x153 }, - { VK_DIVIDE, 0x135 }, - { VK_NUMLOCK, 0x145 }, -{ 0, 0 } + { VK_LEFT, 0x14b, ""}, + { VK_UP, 0x148, "" }, + { VK_RIGHT, 0x14d, "" }, + { VK_DOWN, 0x150, "" }, + { VK_PRIOR, 0x149, "" }, + { VK_NEXT, 0x151, "" }, + { VK_END, 0x14F, "" }, + { VK_HOME, 0x147, "" }, + { VK_INSERT, 0x152, "" }, + { VK_DELETE, 0x153, "" }, + { VK_DIVIDE, 0x135, "" }, + { VK_NUMLOCK, 0x145, "" }, + { VK_NUMPAD0, 0x52, "" }, + { VK_NUMPAD1, 0x4F, "" }, + { VK_NUMPAD2, 0x50, "" }, + { VK_NUMPAD3, 0x51, "" }, + { VK_NUMPAD4, 0x4b, "" }, + { VK_NUMPAD6, 0x4d, "" }, + { VK_NUMPAD7, 0x47, "" }, + { VK_NUMPAD8, 0x48, "" }, + { VK_NUMPAD9, 0x49, "" }, + { VK_VOLUME_MUTE, 0x120, "Volume Mute"}, + { VK_VOLUME_DOWN, 0x12e, "Volume Down"}, + { VK_VOLUME_UP, 0x130, "Volume Up"}, + { VK_MEDIA_NEXT_TRACK, 0x119, "Media Next Track"}, + { VK_MEDIA_PREV_TRACK, 0x110, "Media Previous Track"}, + { VK_MEDIA_STOP, 0x124, "Media Stop"}, + { VK_MEDIA_PLAY_PAUSE, 0x122, "Media Play/Pause"}, +{ 0, 0, 0 } }; quint32 Hotkey::defaultKey() @@ -66,18 +83,18 @@ quint32 Hotkey::defaultKey(int act) //default key bindings QMap keyMap; keyMap[PLAY] = 0; - keyMap[STOP] = 0; + keyMap[STOP] = VK_MEDIA_STOP; keyMap[PAUSE] = 0; - keyMap[PLAY_PAUSE] = 0; - keyMap[NEXT] = 0; - keyMap[PREVIOUS] = 0; + keyMap[PLAY_PAUSE] = VK_MEDIA_PLAY_PAUSE; + keyMap[NEXT] = VK_MEDIA_NEXT_TRACK; + keyMap[PREVIOUS] = VK_MEDIA_PREV_TRACK; keyMap[SHOW_HIDE] = 0; - keyMap[VOLUME_UP] = 0; - keyMap[VOLUME_DOWN] = 0; + keyMap[VOLUME_UP] = VK_VOLUME_UP; + keyMap[VOLUME_DOWN] = VK_VOLUME_DOWN; keyMap[FORWARD] = 0; keyMap[REWIND] = 0; keyMap[JUMP_TO_TRACK] = 0; - keyMap[VOLUME_MUTE] = 0; + keyMap[VOLUME_MUTE] = VK_VOLUME_MUTE; return keyMap[act]; } @@ -232,12 +249,20 @@ const QString HotkeyManager::getKeyString(quint32 key, quint32 modifiers) LONG lScan = MapVirtualKey(key, 0) << 16; - for(int i = 0; i < 12; ++i) + for(unsigned int i = 0; i < sizeof(keyMap)/sizeof(keyMap[0]); ++i) { if(keyMap[i].key == key) { - lScan |= 0x1000000; // set extended bit - break; + if(!keyMap[i].name.isEmpty()) + { + keyStr += keyMap[i].name; + return keyStr; + } + else if(keyMap[i].code & 0x100) + { + lScan |= 0x1000000; // set extended bit + break; + } } } @@ -266,7 +291,7 @@ quint32 HotkeyManager::keycodeToKeysym(quint32 keycode) { //MapVirtualKey does not work with some scan codes //using hardcoded key map instead - for(int i = 0; i < 12; ++i) + for(unsigned int i = 0; i < sizeof(keyMap)/sizeof(keyMap[0]); ++i) { if(keyMap[i].code == keycode) return keyMap[i].key; -- cgit v1.2.3-13-gbd6f