Windows 10 WSL bashとAutohotkeyで複数の位置を同時にクリックする

    >


bashとAutohotkeyで複数の場所を同時にクリックするスクリプトを書きましたのでシェア。

https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_ce8974f5-5f9e-40ed-a32b-7744df1a90fb.gif

マイクとシステム音声を同時に録音したくて、そういうソフトウェアとかなさげだったので複数のソフトウェアで同時にマイクの録音、システムサウンドの録音を同時にする方法を取りました。
そこで、レコーディング開始ボタンを同時にクリックするのに、簡単なツールを作ってみたというところです。



コード


clickPositionsAtSameTime(){ : <<< ' e.g. clickast audacity.exe CHoRoKuF.exe e.g. clickast audacity.exe audacity.exe ' # sleepWithDisplay 5 { # telegram-sendMessage "clickast: Make locate mouse cursor on 'want_to_click_position_1' on audacity.exe" >&/dev/null ; sleep 5s ; \ # telegram-sendMessage "clickast: Make locate mouse cursor on 'want_to_click_position_2' on CHoRoKuF.exe" >&/dev/null & # telegram-sendMessage "clickast: locate mouse cursor on the position 01 on audacity.exe" >&/dev/null ; sleep 5s ; \ # telegram-sendMessage "clickast: locate mouse cursor on the position 02 on CHoRoKuF.exe" >&/dev/null & : ; } cat << EOT > /mnt/c/_tmp/tmp.ahk CoordMode, Mouse, Screen ; telegram-sendMessage here RunWait, bash.exe -ic 'telegram-sendMessage "clickast: locate mouse cursor on the position 01 on ${1}" >&/dev/null' sleep 5000 MouseGetPos, want_to_click_position_1_X, want_to_click_position_1_Y ; # RunWait, bash.exe -ic 'telegram-sendMessage "clickast: the position 01 is %want_to_click_position_1_X% / %want_to_click_position_1_Y%" >&/dev/null' MouseMove, want_to_click_position_1_X + 30, want_to_click_position_1_Y + 30, 0 MouseMove, want_to_click_position_1_X - 30, want_to_click_position_1_Y - 30, 50 MouseMove, want_to_click_position_1_X - 30, want_to_click_position_1_Y + 30, 0 MouseMove, want_to_click_position_1_X + 30, want_to_click_position_1_Y - 30, 50 ; telegram-sendMessage here RunWait, bash.exe -ic 'telegram-sendMessage "clickast: locate mouse cursor on the position 02 on ${2}" >&/dev/null' sleep 5000 MouseGetPos, want_to_click_position_2_X, want_to_click_position_2_Y ; # RunWait, bash.exe -ic 'telegram-sendMessage "clickast: the position 02 is %want_to_click_position_2_X% / %want_to_click_position_2_Y%" >&/dev/null' MouseMove, want_to_click_position_2_X + 30, want_to_click_position_2_Y + 30, 0 MouseMove, want_to_click_position_2_X - 30, want_to_click_position_2_Y - 30, 50 MouseMove, want_to_click_position_2_X - 30, want_to_click_position_2_Y + 30, 0 MouseMove, want_to_click_position_2_X + 30, want_to_click_position_2_Y - 30, 50 WinActivate, ahk_exe ${1} WinWaitActive, ahk_exe ${1} MouseClick, left, want_to_click_position_1_X, want_to_click_position_1_Y sleep 200 WinActivate, ahk_exe ${2} WinWaitActive, ahk_exe ${2} MouseClick, left, want_to_click_position_2_X, want_to_click_position_2_Y sleep 200 EOT psl ahk C:/_tmp/tmp.ahk } alias clickast="clickPositionsAtSameTime"

## bash alias psl='/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/powershell.exe' telegram-sendMessage () { curl -s -X POST "https://api.telegram.org/${TELEGRAM_API_KEY}/sendMessage" -d chat_id=638365737 -d text="${1:-Hello World}" } ## powershell Set-Alias ahk "C:\Program Files\AutoHotkey\AutoHotkeyU64.exe"

これは2つの位置を同時クリックする例ですが、コードをちょちょっと追記すれば3つでも4つでも行けるかと思います。

使い方

clickast audacity.exe CHoRoKuF.exe

解説

添付のgif動画を見てもらえればどういうプロセスなのかわかりやすいかと思いますが、簡単にプロセスを説明しておきます。

デスクトップ通知[xx.exeの位置01にマウスカーソルを載せてください] > 5秒後にマウスカーソルの位置を取得、変数へ保存 > クリック位置の確認としてバツ印を描くようにエフェクトする >
デスクトップ通知[yy.exeの位置02にマウスカーソルを載せてください] > 5秒後にマウスカーソルの位置を取得、変数へ保存 > クリック位置の確認としてバツ印を描くようにエフェクトする >
xx.exeをアクティーベートして位置01をクリックする > 200ms待機(変更可能) > yy.exeをアクティーベートして位置02をクリックする

特筆して難しいことはしていないので、これ以上説明はいらないかと思います。強いて言うなら

MouseMove, want_to_click_position_1_X + 30, want_to_click_position_1_Y + 30, 0
MouseMove, want_to_click_position_1_X - 30, want_to_click_position_1_Y - 30, 50
MouseMove, want_to_click_position_1_X - 30, want_to_click_position_1_Y + 30, 0
MouseMove, want_to_click_position_1_X + 30, want_to_click_position_1_Y - 30, 50

の部分、マウスを動かしてバツ印を描く部分になりますが、どうやってクリック予定位置を知らせることができるだろうか、ということを少し考えたくらいです。

あとは、僕としてはautohotkeyで複雑なことはしたくなかったので、autohotkeyスクリプト内でbashの外部コマンドを実行するのは本望ではなかったのですが – コメントアウトしてある部分がそれです -、これについても少し。
bashからバッググラウンドで実行してautohotkeyの実行に合わせて実行されるようにする、という手法を最初取っていたのですが、これだとautohotkeyの実行が遅いのか、どっかでラグが発生してるようで、ちゃんと予定経過時間どおりに機能しないんですよね。コード自体もダーティーになってしまうこともあり、仕方なくautohotkeyで外部コマンドでやるって方法を取りました。

psl はじめてのBash。関数やエイリアスを読み込むまで [初心者向け]

alias psl='/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/powershell.exe'

ahk はじめてのPowershell。関数やエイリアスを読み込むまで [初心者向け]

Set-Alias ahk "C:\Program Files\AutoHotkey\AutoHotkeyU64.exe"



お困りですか?この記事で紹介していることをマンツーマンで指導、解説、代行します。まずはお気軽にお問い合わせください。


Close Menu