真・無限ループから脱出せよ
前回までのあらすじ
無限ループからの脱出に成功したExecIf、DoNothing、ExecMulti。だが、ほっとするのもつかの間、新たな無限ループが目の前に立ちふさがるのであった。新アプリCondExecと協力し、今度こそ無限ループの完全撃破を目指すのだ!
目的
自動下スクロールをより完璧に実現する
概要
前回の無限ループ処理方法には、
また、ExecMultiの処理中には別のExecMultiを起動できないことに注意が必要です。そこで、 -スリープ処理はExecMultiではなく、ExecIfで行う -スリープ処理を行ってから、ExecMultiを呼び出す にする必要があり、最初に1秒待って、最後に下キーが押されてしまうわけです。
という欠点がありました。また理論的には、10/1000=0.1%ぐらいの確率(ExecMultiが処理中のとき)で正常動作しないはずです。
これをCondExecを併用することで改善します。
使用アプリ
手順
- 前述のアプリを\Program Files\アプリ名\アプリ名.exeにインストールする
- 以下の内容を\Program Files\CondExec\CondExec.iniに追加して保存する
[ScrollDown] class=DoNothing title=ScrollDown check=current trigger=running exec=\Program Files\execmulti\execmulti.exe|ScrollDown
- 以下の内容を\Program Files\execmulti\execmulti.iniに追加して保存する
[ScrollDown] exec=\Program Files\KeyInputEmulator\KeyInputEmulator.exe|Down sleep=1000 exec=\Program Files\CondExec\CondExec.exe|-execmode=open -section=ScrollDown
- 以下の内容を\Program Files\execif\execif_ScrollDown.iniとして保存する
[ScrollDown_End] class=DoNothing title=ScrollDown mode=exec exec=close [default] exec=\Program Files\execmulti\execmulti.exe|ScrollDown exec=\Program Files\DoNothing\DoNothing.exe|-execmode=open -title=ScrollDown
- ランチャーやボタン等に以下の内容を割り当てる
- プログラム:\Program Files\execif\execif.exe
- パラメータ:\Program Files\execif\execif_ScrollDown.ini
- 上記を実行し、いろいろなアプリで下スクロールして楽しむw
解説
前回の処理は、
- ExecMulti(ScrollDown_Trigger)
- ExecIf(ScrollDown) ←ループ判定+1000ミリ秒待ち
- ExecMulti(ScrollDown) ←下キー
- (繰り返し)
のように、ExecIfとExecMultiのループになっていました。ExecMultiが同時起動に対応していないので、ExecIf処理中しかExecMulti(ScrollDown_Trigger)を起動できないという制約がありました。
今回の処理ではCondExecを併用することで、
- ExecIf(default)
- ExecMulti(ScrollDown) ←下キー+1000ミリ秒待ち
- CondExec(ScrollDown) ←ループ判定
のように、ExecMultiとCondExecのループになっています。これでループ状況と無関係にExecIfを呼び出せます。すると制約がなくなるので、
- スリープ処理をループ内のどちらのアプリからでも行える
- スリープ処理を任意のタイミングで行える
ことになり、処理の最適化をしてやると初回も最速で下キー入力され、最後も余計な下キー入力が行われないわけです。
え〜、某所でリクエスト頂いたんでまとめてみましたw でも、前回より複雑になったにも関わらず、体感的にはそんな大差ありません。単なる自己満足です、ぐふ。
あと余談ですが、CondExecは同時起動に対応してるため、ExecIfをCondExec+ExecMultiに置き換えることも出来ます、多分。興味のある方は宿題としてどうぞw
「電話に誰も出んわ!」なんて寒いことはもう言わせません
なんと今夜は豪華2本立て!(内容が豪華かは置いといて(^^;)
CondExecの活用例第3弾です。
(9/25 00:50修正)安定性を高めるため、CondExecのchekモードをchangeからbothに変更しました。最近マクロの完成度が落ちててすいません・・・
(9/24 15:15修正)CondExec.iniが1カ所間違ったので修正しました、これでたぶん動くはずです。やっぱ最後に動作チェックしないとダメですね・・・といいながら今回も動作チェックしてません(ぉぃ
目的
電話が掛かってきたときに呼び出し音量を最大にする
概要
電話が掛かってきた際、電話アプリが起動するので、それをCondExecのトリガーにして音量を最大にします。同様に終了したら音量を小さくします。
使用アプリ
手順
- 上記アプリを\Program Files\アプリ名\アプリ名.exeにインストールする
- 以下の内容を\Program Files\CondExec\CondExec.iniに追加して保存する
[Denwa_Active_VolMAX] class=AfxFrameOrView80su title=電話 check=both trigger=active exec=\Program Files\execmulti\execmulti.exe|Denwa_Active_VolMAX [Denwa_Inactive_VolDown] class=AfxFrameOrView80su title=電話 check=both trigger=inactive exec=\Program Files\execmulti\execmulti.exe|Denwa_Inactive_VolDown
(9/25 00:50追記)当初のcheck=changeだと、電話が終了し終わってないうちに電話起動を監視し始めた場合、そこでループが終了してしまってました。そこでcheck=bothに変更しました。安定性が増すはずです。
(9/24 15:15修正)大文字/小文字を1カ所間違えてました・・・ExecMultiはセクション名の大文字/小文字を区別するので注意という実例ってことでw
※電話アプリのクラス名、タイトルは初代W-ZERO3(WS003SH)で確認したものです、WS004SH/WS007SHでは異なる可能性があります。動かなかったらご指摘ください(^^;
- 以下の内容を\Program Files\execmulti\execmulti.iniに追加して保存する
[Denwa_Active_VolMAX] exec=\Program Files\chgvol\chgvol.exe|15 exec=\Program Files\CondExec\CondExec.exe|-execmode=open -section=Denwa_Inactive_VolDown [Denwa_Inactive_VolDown] exec=\Program Files\chgvol\chgvol.exe|5 exec=\Program Files\CondExec\CondExec.exe|-execmode=open -showicon=false -section=Denwa_Active_VolMAX
- 以下のショートカットを\Windows\スタートアップ\に作成する
- "\Program Files\CondExec\CondExec.exe" -showicon=false -execmode=open -section=Denwa_Active_VolMAX
- ショートカットの作り方は適当に探してください(ぉ
- "\Program Files\CondExec\CondExec.exe" -showicon=false -execmode=open -section=Denwa_Active_VolMAX
- 電話がかかってくると音量が最大になるので喜ぶw
注意点
- 電話アプリでの電話を掛ける際の操作音等も最大になるので注意してください。
- マナーモード、ドライブモードの場合、音量最大にしてもすぐ音量オフに戻されるため、この方法では音はなりません。強制的に鳴らしたい場合にはSetManner等を併用してください。
解説
CondExec作者の392様が途中まで公開されたのを、実際にchgvolと組み合わせてみました。かつ分かりやすさ優先で簡略化してます(^^;
再起動後にCondExecが常駐し、電話アプリのアクティブ化を監視します。アクティブ化したらchgvolで音量を最大(15)に変更し、今度は電話アプリの非アクティブ化を監視します。で、音量を調節(5)するわけです。なお5以外に調節したい場合、execmulti.iniの
- exec=\Program Files\chgvol\chgvol.exe|5
を適当に調節してください。
せっかくのCondExecの実行例を埋もれさせるのはもったいないので、勝手に流用してしまいました(^^;
それにしてもやっぱCondExec楽しいですわ〜、もりもりアイデアが出てきて追いつきませんw