真・無限ループから脱出せよ

前回までのあらすじ

無限ループからの脱出に成功したExecIf、DoNothing、ExecMulti。だが、ほっとするのもつかの間、新たな無限ループが目の前に立ちふさがるのであった。新アプリCondExecと協力し、今度こそ無限ループの完全撃破を目指すのだ!

目的

自動下スクロールをより完璧に実現する

概要

前回の無限ループ処理方法には、

また、ExecMultiの処理中には別のExecMultiを起動できないことに注意が必要です。そこで、
-スリープ処理はExecMultiではなく、ExecIfで行う 
-スリープ処理を行ってから、ExecMultiを呼び出す 
にする必要があり、最初に1秒待って、最後に下キーが押されてしまうわけです。

という欠点がありました。また理論的には、10/1000=0.1%ぐらいの確率(ExecMultiが処理中のとき)で正常動作しないはずです。
これをCondExecを併用することで改善します。

使用アプリ

  • ExecMulti (ももたろ様)
    • 複数のアプリを連続して実行するツール
  • ExecIf (ももたろ様)
    • アプリの起動状況によってアプリを実行しわけるツール
  • CondExec (392様)
    • アプリの起動状況を監視してアプリを実行するツール
  • DoNothing (392様)
    • ExecIf等で利用するためのダミーアプリを実行するツール

手順

  • 前述のアプリを\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