我有一个多媒体键盘,上面有播放/暂停、下一个、上一个等按钮,我用 Rhapsody 播放音乐。但是有一个问题,除非是活动窗口,否则程序无法识别(或操作系统无法传递)多媒体按键。
有没有办法通过第三方程序(Autohotkey 或类似程序)解决这个问题,并让其捕获击键并将其提供给特定的应用程序?
答案1
最简单的方法是将按键发送到非活动窗口自动热键是:(1)记住当前活动窗口,(2)激活目标窗口,(3)发送击键,(4)激活原始窗口。
以下脚本适用于狂想曲:
Media_Play_Pause::
WinGet, original, ID, A
WinActivate, Rhapsody
Send ^p
WinActivate, ahk_id %original%
Exit
Media_Stop::
WinGet, original, ID, A
WinActivate, Rhapsody
Send ^s
WinActivate, ahk_id %original%
Exit
Media_Prev::
WinGet, original, ID, A
WinActivate, Rhapsody
Send ^b
WinActivate, ahk_id %original%
Exit
Media_Next::
WinGet, original, ID, A
WinActivate, Rhapsody
Send ^f
WinActivate, ahk_id %original%
Exit
注意:如果 AutoHotkey 没有将Media_Play_Pause
et al 注册到键盘的媒体键,则必须手动检索扫描代码。说明可在我的回答中找到:https://superuser.com/a/371141/100787
答案2
将密钥发送到特定窗口的官方(也是最简单)方法是使用控制发送功能:
ControlSend,, P , Raphsody
ControlSend,, {Media_Stop} , ahk_id %HWND%
ControlSend,, ^{Space} , ahk_pid %RAHP_PID%
etc.
答案3
我需要做类似的事情,所以出于好奇我尝试了两者:
#Media_Play_Pause::
WinGet, original, ID, A
WinActivate, MyWindowTitle name - Rapsody
Send ^p
WinActivate, ahk_id %original%
return
和
Media_Play_Pause::
ControlSend ahk_parent, ^p, MyWindowTitle name - Rapsody
return
显而易见,第二种方法不仅不太复杂,而且速度也更快。