Сейчас буду опять навязывать громоздкое решение
.
Есть такой планировщик -
nnrcon . Есть также клавиатура Defender KM-1080B. C помощью планировщика который может отслеживать нажатие кнопок клавиатуры настраиваем как душе угодно. К примеру:
Код:

#( KB_Opera
AsLoggedUser
LoadProfile
WatchHotKey: "{0xAC}"
Rule: PROC-EXIST: "opera.exe" NOT
Action:
StartIn: "D:\programs\Inet\Opera75"
ShowMaximized NormalPriority
START-APP: D:\programs\Inet\Opera75\Opera.exe
)#
#( KB_Maxthon
AsLoggedUser
LoadProfile
WatchHotKey: "+{0xAC}"
Rule: PROC-EXIST: "myie.exe" NOT
Action:
StartIn: "D:\programs\Inet\Maxthon"
ShowMaximized NormalPriority
START-APP: D:\programs\Inet\Maxthon\Maxthon.exe
)#
#( KB_IE
AsLoggedUser
LoadProfile
WatchHotKey: "^{0xAC}"
Action:
StartIn: "C:\Program Files\Internet Explorer"
ShowMaximized NormalPriority
START-APP: C:\Program Files\Internet Explorer\iexplore.exe
)#
#( KB_FireFox
AsLoggedUser
LoadProfile
WatchHotKey: "@{0xAC}"
Rule: PROC-EXIST: "firefox.exe" NOT
Action:
StartIn: "D:\programs\Inet\Firefox08"
ShowMaximized NormalPriority
START-APP: D:\programs\Inet\Firefox08\firefox.exe
)#
#( KB_Mailer
AsLoggedUser
WatchHotKey: "{0xB4}"
Rule: PROC-EXIST: "thebat.exe" NOT
Action:
StartIn: "D:\programs\Inet\The Bat! 2"
ShowNormal NormalPriority
START-APP: D:\programs\Inet\The Bat! 2\thebat.exe /NOLOGO
)#
#( KB_Miranda
AsLoggedUser
WatchHotKey: "{0xAB}"
Rule: PROC-EXIST: "miranda32.exe" NOT
Action:
StartIn: "D:\programs\Inet\Miranda IM"
ShowNormal NormalPriority
START-APP: D:\programs\Inet\Miranda IM\Miranda32.exe
)#
#( KB_Back
NoActive
AsLoggedUser
WatchHotKey: "{0xA6}"
Action:
RE-MATCH: "%ACTIVE-WINDOW%" "/.*Opera$/"
IF
WIN-SEND-KEYS: "*Opera*" "z"
ELSE
RE-MATCH: "%ACTIVE-WINDOW%" "/.*Explorer$/"
IF
WIN-SEND-KEYS: "*Internet Explorer*" "@{0x25}"
THEN
THEN
)#
#( KB_Forward
NoActive
AsLoggedUser
WatchHotKey: "{0xA7}"
Action:
RE-MATCH: "%ACTIVE-WINDOW%" "/.*Opera$/"
IF
WIN-SEND-KEYS: "*Opera*" "x"
THEN
RE-MATCH: "%ACTIVE-WINDOW%" "/.*Explorer$/"
IF
WIN-SEND-KEYS: "*Internet Explorer*" "@{0x27}"
THEN
)#
#( KB_Volume+
AsLoggedUser
WatchHotKey: "{0xAF}"
Action:
MIXER-STATE 0=
IF
ELSE
3 MIXER-UP
THEN
)#
#( KB_Volume-
AsLoggedUser
WatchHotKey: "{0xAE}"
Action:
MIXER-STATE 0=
IF
ELSE
3 MIXER-DOWN
THEN
)#
#( KB_Lock
AsLoggedUser
WatchHotKey: "{0x5F}"
WINAPI: LockWorkStation USER32.DLL
Action:
LockWorkStation DROP
)#
#( KB_MediaPlayPause
WatchHotKey: "{0xB3}"
Rule: PROC-EXIST: "winamp.exe"
Action:
RE-MATCH: "%ACTIVE-WINDOW%" "/.*Media Player$/"
IF
WIN-SEND-KEYS: "*Windows Media Player*" " "
ELSE
RE-MATCH: "%ACTIVE-WINDOW%" "/ActiveMovie Window$/"
IF
WIN-SEND-KEYS: "ActiveMovie Window" " "
ELSE
S" D:\programs\Audio\Winamp295\!wapause.tmp" EXIST?
IF
WINAMP-PLAY
S" D:\programs\Audio\Winamp295\!wapause.tmp" FDELETE
ELSE
WINAMP-PAUSE
S" D:\programs\Audio\Winamp295\!wapause.tmp" FCREATE
THEN
THEN
THEN
)#
#( KB_MediaStop
AsLoggedUser
WatchHotKey: "{0xB2}"
Action:
RE-MATCH: "%ACTIVE-WINDOW%" "/.*Media Player$/"
IF
WIN-SEND-KEYS: "*Windows Media Player*" "{ESC}"
ELSE
RE-MATCH: "%ACTIVE-WINDOW%" "/ActiveMovie Window$/"
IF
WIN-SEND-KEYS: "ActiveMovie Window" "{ESC}"
ELSE
WINAMP-STOP
S" D:\programs\Audio\Winamp295\!wapause.tmp" FCREATE
THEN
THEN
)#
#( KB_NextTrack
AsLoggedUser
WatchHotKey: "{0xB0}"
Action:
RE-MATCH: "%ACTIVE-WINDOW%" "/.*Media Player$/"
IF
WIN-SEND-KEYS: "*Windows Media Player*" "{PGDN}"
ELSE
RE-MATCH: "%ACTIVE-WINDOW%" "/ActiveMovie Window$/"
IF
WIN-SEND-KEYS: "ActiveMovie Window" "{PGDN}"
ELSE
WINAMP-NEXT-TRACK
THEN
THEN
)#
#( KB_PrevTrack
AsLoggedUser
WatchHotKey: "{0xB1}"
Action:
RE-MATCH: "%ACTIVE-WINDOW%" "/.*Media Player$/"
IF
WIN-SEND-KEYS: "*Windows Media Player*" "{PGUP}"
ELSE
RE-MATCH: "%ACTIVE-WINDOW%" "/ActiveMovie Window$/"
IF
WIN-SEND-KEYS: "ActiveMovie Window" "{PGUP}"
ELSE
WINAMP-PREVIOUS-TRACK
THEN
THEN
)#
#( KB_WhereIsIt
AsLoggedUser
WatchHotKey: "+{0xAA}"
Rule: WIN-EXIST: "*Where Is It? - *" NOT
Action:
StartIn: "D:\programs\CD\WhereIsIt"
ShowMaximized NormalPriority
START-APP: D:\programs\CD\WhereIsIt\WhereIsIt.exe
)#
#( KB_SpeakTime
AsLoggedUser
WatchHotKey: "$+t"
Action:
SPK-RUSSIAN SpkTime
)#
#( KB_ShowTime
AsLoggedUser
WatchHotKey: "$t"
Action:
GET-CUR-TIME
HINT-POS: 1017 27
THINTW: "%hh%:%mm%:%ss%%crlf%%DD%.%MM%.2k%YY%" 3
)#
Это задачи планировщика, срабатывают они по определенным клавиатурным комбинациям и действия выполняются какие необходимы мне, а не той программе которая пришла с клавиатурой. Тут задействованы не только мультимедийные клавиши (их можно узнать по шеснадцатиричному виду представления). Например задача KB_Mailer переопределяет запуск мэйл-клиента на любимый мне TheBat!, а KB_Miranda запуск Миранды по клавише которая до вмешательства открывала "избранное" (на кнопке звездочка очень похожая на цветок Миранды). В общем можно сделать все что угодно... при желании

. В вашем случае это будет несколько неудобно ибо больше этого планировщик использоваться не будет и хоть памяти и времени процессора он кушает мало это все равно как-то неоптимально. Остается полюбить nncron и юзать его везде и всегда

. Желаю удачи в поиске оптимального решения.