web-dev-qa-db-ja.com

キーストロークを特定のアプリケーションに送信できますか?

Play/Pause、Next、Previousなどのボタンが付いたマルチメディアキーボードを持っていて、音楽にRhapsodyを使用しています。ただし、アクティブウィンドウでない限り、プログラムがマルチメディアキーストロークを認識しない(またはOSがパスしない)という問題があります。

サードパーティのプログラム(Autohotkeyなど)でこれを回避し、キーストロークをキャプチャして特定のアプリケーションにフィードする方法はありますか?

4
Nick T

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

1
iglvzx

特定のウィンドウにキーを送信する公式の(そして最も簡単な)方法は、 ControlSend 関数を使用することです。

ControlSend,, P            , Raphsody

ControlSend,, {Media_Stop} , ahk_id %HWND%

ControlSend,, ^{Space}     , ahk_pid %RAHP_PID%

etc.
1
Synetech

私は両方を試した好奇心からそうするために同様のことを必要としていました:

#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番目のものはそれほど複雑ではないだけでなく、はるかに高速であることはおそらく明らかです。

0
Saulius