Play/Pause、Next、Previousなどのボタンが付いたマルチメディアキーボードを持っていて、音楽にRhapsodyを使用しています。ただし、アクティブウィンドウでない限り、プログラムがマルチメディアキーストロークを認識しない(またはOSがパスしない)という問題があります。
サードパーティのプログラム(Autohotkeyなど)でこれを回避し、キーストロークをキャプチャして特定のアプリケーションにフィードする方法はありますか?
AutoHotkey を使用して非アクティブなウィンドウにキーストロークを送信する最も簡単な方法は、(1)現在アクティブなウィンドウを記憶し、(2)ターゲットウィンドウをアクティブにし、(3)キーストロークを送信し、(4)アクティブにすることです。元のウィンドウ。
この次のスクリプトはRhapsodyで動作します:
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
キーボードのメディアキーなどでは、スキャンコードを手動で取得する必要があります。手順はここで私の答えにあります: https://superuser.com/a/371141/100787
特定のウィンドウにキーを送信する公式の(そして最も簡単な)方法は、 ControlSend 関数を使用することです。
ControlSend,, P , Raphsody
ControlSend,, {Media_Stop} , ahk_id %HWND%
ControlSend,, ^{Space} , ahk_pid %RAHP_PID%
etc.
私は両方を試した好奇心からそうするために同様のことを必要としていました:
#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
2番目のものはそれほど複雑ではないだけでなく、はるかに高速であることはおそらく明らかです。