読者です 読者をやめる 読者になる 読者になる

PPxID指定の *focus で別タイトルのウィンドウに誤爆しないようにする

Paper Plane xUI

PPxのID指定方法を用いた*focus (*focus CDなど)を使うと、該当のPPxが存在せず、同キャプションを含むタイトルのウィンドウがあるときは、そちらにフォーカス移動がされてしまう。

例えば

*focus %*getcust(_User:ppcid)
_User:ppcid の中身は *setcust で取得した %n (CD)

といった条件で利用すると、PPc[D]が存在しない場合、「CD Player」といった文字列が含まれるタイトルを持つウィンドウが表示されてしまう。

これを避けるためには、どうしようか迷ったが、*focus には%Nで取得できるPPxのWindow Handle値を指定することにした。

4) caption に #数値 と指定したときは、指定した数値をウィンドウID(ウィンドウハンドル)として、該当ウィンドウにフォーカス移動します。Message Module を使ってキャプションやクラス名の完全一致でウィンドウを指定するときに使用できます。
PPx help
*focus #%NCA

目的の動作をさせるためには、こんな感じ。

ただ、 *setcust と %*getcust() では、 #%N%n をユーザーカスタマイズに保存しても、展開して利用できないので、*alias%g'name' マクロ文字展開付きエイリアスを利用。

PPcIDの保存は

*alias ppcid=#%%N%n

A_execには下のように保存される

A_exec    = {	; エイリアス
ppcid = #%NCA
}

フォーカス移動での指定は

*focus %g'ppcid'

これで *focus #%NCA が展開されて実行されるので、ウィンドウタイトルによる誤爆が無くなった。