なげやりろぐ

フテイキコウシン

 昨日のつづき

同期をとるに当たってSleipnirを強制終了させるのはヤハリまずい結果になりました...orz
そこで、昨日チラリと触れたAutoHotKeyを使ってスクリプトを書き、さらにはそれを実行形式にコンパイルして、単独で使用できるようにしてみました。


AutoHotKeyはインストールしてもいいですが、ほとんど使わないのであればインストーラ版ではなくZIP版を解凍して適当な場所へ格納しておけば余計な関連づけや新規メニューへの追加なども行われないので気軽に試すことができます。

操作方法は割愛しますが、ざっとこんなスクリプトを書いてテスト後にコンパイルしました。

/*
Sleipniを安全に終了したのち同期を開始するショートカットを呼び出して終了する
*/

IfWinActive ahk_class SleipnirMainWindow
WinClose, ahk_class SleipnirMainWindow
WinWaitClose

Menu, Tray, Icon, Sleipnir_Sync.ico
Menu, Tray, Tip, Sleipnir_Syncro
Menu, Tray, Add,同期をしないで終了,Exit
Menu, Tray, Nostandard

MsgBox,   Sleipnirを終了しました.。 --- 同期を開始します ---`n`n中止する場合はタスクトレイの黄色いアイコンから終了してください。

Run "C:\Program Files\Sleipnir\DSync.exe.lnk"

Exit:
Exitapp

Return

#P:: Menu, Tray, Show

ショートカットキーを指定していないので、実行は一度きりで終了(RunOnce)します。
同期のためのアプリであるRSyncはスクリプト中で引数を指定できなかったので、ショートカットへ実行先を割り当ててあります。
(何か引数指定のやり方があるのかもしれないけど、調べる気力がなかった)

スクリプトの動作を確認後、AutoHotKeyにファイルに同梱されているコンパイラを使って単独実行できるようにします。

コンパイラでは実行ファイルに使用するアイコンも指定できるので、先日作った黄色いヤツを指定して作成しました。


結果はバッチリOKでした。
この方法だとウインドウクラスを指定して、そのウインドウを閉じる動作をさせるので終了処理には問題が起きません。

ユーザー定義ツールにこの実行ファイルを指定してショートカットキーかマウスのアクションに登録して実行するとSleipnirが終了し、確認のダイアログが出ます。


このときOKを押すと同期が始まりますが、キャンセルしたいときはタスクトレイのメニューから終了させます。


ウインドウの方でキャンセルさせるようにすればよかったのですが、実装がめんどくさくなってきたのでこの方法にしました。


これでようやくまともな同期の半自動式実行が行えるようになりました。
めでたしめでたし・・・