一行スクリプトの時の特別な仕様

このページは少し長めの内容になっています。

このページ間を移動できるメニューがあります。

これと同じものがページの右上にあるので、これをクリックするとこのページ間を移動できるメニューが現れます。

一行スクリプト の場合、 二行以上のスクリプト の場合と動作する仕様が少し違う部分があります。

このページではその事について説明します。

以下の 2つの場合に分けて説明します。

  • 一行スクリプト の時のみの特別な仕様
  • 一行テキスト で動作をさせる時のみの特別な仕様

特別な仕様といっても別に難しい事ではありません。

このページで説明する事は以下の事です。

  • 一行スクリプト の時は、

    • if文を一行で記入するルールが使える。
  • 一行テキスト で動作させる時は、

    • ウインドウ関連の AHKコマンドA を指定している場合は、 テキスト を閉じてから実行する。
    • Send 系の AHKコマンド を使うと テキスト を閉じてから実行する。
    • 一時的な説明表示 に結果が出力されて、ウインドウが表示する。
    • 実行元の テキスト で動作する系の規定のコマンドは 一行テキスト で使った場合のみ意味がある。
    • Executor が付く名前の規定のコマンドを使うと、実行元の テキスト を認識して実行する。

TRR のスクリプトでは、以上の場合 一行スクリプト の場合と 二行以上のスクリプト の場合とで動作の仕様が少し違う事になっています。

  • 一行スクリプト なら if文を一行で記入する方法が使える事や、
    ウインドウ関連と Send 系の AHKコマンド一行テキスト 使から使った場合、 テキスト を閉じてから実行すると多少便利に使えると思ったのでこの様な仕様にしています。

  • 一時的な説明表示 には、 一行テキスト で実行した場合はそのウインドウが表示され、
    それ以外のもので実行した場合はウインドウが表示されない様になっています。
    そのルールも今回説明する括りと同じ様なものなのでここで説明しておきます。

  • 「実行元の テキスト で動作する系の規定のコマンドは 一行テキスト で使った場合のみ意味がある。」 については、特別な仕様というよりは注意書きに近いものです。

  • Executor が付く名前の規定のコマンドを使うと、実行元の テキスト を認識して実行する。」 についてですが、
    「実行元の テキスト で動作する系の規定のコマンドは 一行テキスト で使った場合のみ意味がある。」 のルール上、 二行以上のスクリプト では規定のコマンドは、実行元で動作できないものがあるので、それを補うための規定のコマンドがあるという事を説明するだけです。

このページでの内容は、 一行テキスト から使用した場合だけ、若干ルールが違うという事を知っておけばいい事で、大体はユーザーが予想が付くようなルールだと思います。

とはいっても、動作の違いの細かい仕様が知りたいユーザーもいるかと思いますので、このページで今回の 一行スクリプト を使う場合と 一行テキスト を使う場合における特別なルールについて全て記入する事にします。

為になる内容とかではないですが、全ての仕様をこのページで公にしておこうと思います。

一行スクリプトの時のみの特別な仕様

一行スクリプト の時のみの特別な仕様があるので、その事について説明します。

そもそも 「一行スクリプト の時」 についてですが、 ここで言う 一行スクリプト とは、細かく言うと次の場合を指します。

  • アイテム種類スクリプト として登録したもの。

  • 一行テキスト を使って使用したもの。

つまり、 二行以上のアイテム二行以上のテキスト を使ったもの以外の事を言います。

補足

細かい事をいいます。

このホームページの別のページでは 二行以上のスクリプト は 「 一行スクリプト と同じスクリプトを一行一行実行しているもの 」という説明をしています。

そして、このページでは 一行スクリプト は 「 二行以上のアイテム二行以上のテキスト を使ったもの以外の事 」としている以上、矛盾があるといえばある事になります。

ですので、今回のページで言う 一行スクリプト は、このページのみで言う 一行スクリプト という解釈をし、あまり深く気にしないで捉えてほしいと思います。

この 一行スクリプト では、 二行以上のスクリプト と違い、以下のルールが使えます。

if文を一行で記入する

if文を一行で記入できます。

書式は以下の通りです。

if( [条件文] ){ [Trueの時の処理] }
if( [条件文] ){ [Trueの時の処理] } else { [Falseの時の処理] }

今のところですが、 else if も使用可能です。

if( [条件文1] ){ [Trueの時の処理] } else if( [条件文2] ){ [条件文2がTrueの時の処理] }

二行以上のスクリプト ではif文を一行にして使えません。

二行以上のスクリプト の場合は、 一行ではなく、複数行を使った普通の書式の if文の記述をしてください。

一行スクリプト の時のみの特別な仕様は、とりあえずはこれだけです。

一行テキストの時のみの特別な仕様

一行テキスト の時のみの特別な仕様について説明します。

そもそも 「一行テキスト の時」 についてですが、細かく言うと、次の場合を指します。

  • 一行テキスト を使った場合。

  • 上記の 一行スクリプト一行テキスト で使った場合。

以上の場合をいいます。

つまり、 一行テキスト を使った場合でも、 二行以上のアイテム を使った場合は該当しない事になります。

補足

そして、 分割テキスト も今回の事は 一行テキスト と同じルールで動作します。

何度も 一行テキスト と表現していましたが、 分割テキスト も今回の事は 一行テキスト と同じ扱いと捉えてください。

あくまで、 二行以上のアイテム か、 二行以上のテキスト を使わない場合が今回の 「 一行テキスト の時」を意味しています。

そして、今回の 「 一行テキスト の時 」ですが、以下の場合は該当しません。

  • &wait&timer を使った「タイマーを使って動作させた」スクリプト。

  • 設定 にある、 起動時に実行する処理 などに記入して実行させるスクリプト。

  • ストック にある、左側のアイコンをクリックして ストック に記入してあるスクリプトを実行させる時。
  • これらは、 一行スクリプト ではあるものの、 一行テキスト から実行する場合では無いため、今回の例には該当しません。

それと、 常時使用のキー を使って実行させた場合は今回の例には該当しません。

しかし、以下の場合は該当します。

  • テキスト上のキー を使って実行させた場合は、今回の 一行テキスト を使った場合に該当する。

  • Ctrl+1 などのキーを使って ストック を使用して実行した場合も該当する。

この 一行テキスト を使った場合は以下の特別な仕様が適用されます。

ウインドウ関連の AHKコマンドに A を指定している場合

一行テキスト で、ウインドウを操作する AHKコマンド を使う時に、コマンドオプション部分に A を指定していた場合、
一行テキスト を閉じて、それから AHKコマンド を実行します。

WinMove, A, , 100, 100

WinMove などの AHKコマンド でウインドウを操作するものがあります。

それらは、コマンドオプションにウインドウタイトルを指定する個所があります。

その個所に A を指定すると、 AHK ではアクティブなウインドウを指定している事になるといったルールがあります。

このウインドウを操作する AHKコマンド のウインドウタイトルを指定するコマンドオプションに A を指定した記述を 一行テキスト で使用した場合、
その 一行テキスト を閉じて、その後にウインドウを操作する AHKコマンド を行う様になります。

設定関係

その際は、

テキストを閉じるのではなく、最小化させるようにする

の設定にチェックをしているなら、閉じるのではなく最小化をする様になります。

Send系 の Ahkコマンド を使った場合

SendAHKコマンド一行テキスト で実行した場合、その 一行テキスト を閉じてから実行します。

Send, {F1}

この仕様は

  • SendEvent
  • SendInput
  • SendPlay
  • SendRaw

これらの AHKコマンド一行テキスト で実行した場合も同様です。

一時的な説明表示に結果を出力

一行テキスト で実行した場合、 一時的な説明表示 に、実行した結果を出力する様にしています。

V_var1 := 1 + 1

この様に、 一行テキスト を使って変数に代入する処理などを実行すると、 一時的な説明表示 に結果が表示する様にしています。

また、

WinGetTitle , V_var1 , A

この様な、 AHKコマンド の中でも変数に値を代入させるようなものを実行した時も、 一時的な説明表示 に結果が表示する様にしています。

一行テキスト で実行する場合は 一時的な説明表示 で結果を表示する場合が多くあります。

では、 二行以上のスクリプト を使った場合は 一時的な説明表示 で結果を表示しないのかというと、そうではなく 一時的な説明表示 に出力する場合としない場合に分かれます。

そしてこれは、 設定 の影響を受けます。

設定による違い

二行以上のスクリプト の場合は、 設定設定2 のタブ内にある

二行以上のスクリプトの時も
「一時的な説明表示」に結果を出力する

この設定の影響で出力するかどうかが変わります。

  • この設定にチェックが無い場合は、 一時的な説明表示 に結果を出力しません。
    ( 初期値 )

  • この設定にチェックが有る場合は 一行スクリプト と同じ様に、 一時的な説明表示 に結果を出力します。

    ただし、出力される結果がその都度上書きされる形で出力されるため、最後の行のスクリプトの結果しか確認できない様になっています。
    現時点では、一つのスレッド事に蓄えて出力される様な仕組みにはしていません。

    そして、 一時的な説明表示 に結果を出力はするものの、このウインドウは表示しません。 確認する時はユーザーが意図的に表示する必要があります。

以下に 一行スクリプト二行以上のスクリプト の時の違いの例を具体的に出していきます。

すこしややこしいですが、しばらくの間は 一行テキスト で実行した場合との比較ではなく、 一行スクリプト で実行した場合との比較の話になります。

二行以上のスクリプトの時も
「一時的な説明表示」に結果を出力する

の設定にチェックが有る場合は、 一行スクリプト と同じ事になります。

ですので、これから出す例はこの設定にチェックが無い状態の話になります。
( 一時的な説明表示 に結果を出力させない設定の場合。 )

二行以上のスクリプト の場合は

  • 実行結果を出力しない。

  • 二行以上のスクリプトの時も
    「一時的な説明表示」に結果を出力する

    の設定にチェックが無い場合でも 実行結果を出力する。
    ( しかし 一時的な説明表示 のウインドウは表示しない。 )

  • エラーの場合、 エラー表示 の方に出力する。

これらの違いに分かれて動作します。

以下にこれら 3パターンについての、 一行スクリプト二行以上のスクリプト で違う場合の例を出していきます。

実行結果を出力しない。

今回出す例は、 一行スクリプト では 一時的な説明表示 に結果が表示されるが、 二行以上のスクリプト の方ではそうではなく「実行結果を出力しない」例を敢えてだします。

ですので、以下に出す例は、 一行スクリプト でのみ結果が出力される例です。

  • 変数に値を代入する処理をすると、その結果を出力する。

  • 変数名のみ記入して実行すると、変数の値を出力する。

  • 1 + 1 などの計算を入力して実行するとその計算結果を出力する。

  • AHKコマンド を実行すると、実行した内容を出力する。

  • 規定のコマンドの結果を出力する。 ( これは、どの規定のコマンドかによる。 )

他にもありますが、大体は以上が 一行スクリプト でのみ結果が出力される例です。

設定にチェックが無い状態でも実行結果を出力する場合。

二行以上のスクリプトの時も
「一時的な説明表示」に結果を出力する

の設定にチェックが無い状態なら、 一時的な説明表示 に結果を出力しないはずですが、その状態でも 一行スクリプト の時と同じ様に結果を出力する場合もあります。

以下にその 「 二行以上のスクリプト の時も結果を出力する例 」を出します。

  • 規定のコマンドの説明を表示する場合。

    引数に -h のみを指定して実行すると、規定のコマンドによっては 一時的な説明表示 に内容の説明を表示します。

  • &pwd などの、一部の規定のコマンドの結果表示。

  • TRR のスクリプトでは、 AHKコマンド を引数が足りない状態で実行すると、その AHKコマンド の簡易的な説明を 一時的な説明表示 に表示する様にしている。

    その表示も、 二行以上のスクリプト の時も行われる。

これらの場合では、 二行以上のスクリプト の時も結果を出力します。

エラーの場合、エラー表示の方に出力する。

TRR のスクリプトで何らかのエラーがある場合、 エラー表示 のウインドウにエラーの内容が表示されます。

通常はそうですが、中には 一行スクリプト で実行した時は 二行以上のスクリプト で実行した時と違い、エラーを 一時的な説明表示 の方に表示するものがあります。

すこしややこしいですが、先程までの話と同じ様に、 一行テキスト で実行した場合との比較ではなく、 一行スクリプト で実行した場合との比較の話になります。

以下の場合は、 一行スクリプト で実行した時は 一時的な説明表示 の方に表示し、
二行以上のスクリプト で実行した時は エラー表示 の方に表示します。

  • 実行した内容が何の処理か判別できなかった時。

    ファイルパスでも、 アイテム でも、 AHK のスクリプトでも無い文字の時。

  • 一部の規定のコマンドのエラー時。

    &wait や、 &timer や、 &cd のエラーなど。

2022年2月14日
今のバージョンで

説明しておいて何ですが、現時点ではまだこのパターンしかありません。

ですが、この 一行スクリプト で実行した時は 一時的な説明表示 の方にエラーを表示するものは増やしていく方向で考えています。

ですので、この仕様をここで説明しておく事にしました。

今回の、 一行スクリプト で実行した時のエラーは 一時的な説明表示 の方に表示し、
二行以上のスクリプト で実行した時のエラーは エラー表示 の方に表示するという事の説明は簡易的ですが以上です。

長々と書きましたが、 「 一行テキスト を使った時は 一時的な説明表示 に結果を出力する 」という仕様については以上です。

あまり難しい事は気にせずに、 一行テキスト を使うと、 一時的な説明表示 に結果を出力する様にしてあるものだという事が分かればそれだけで十分だと思います。

この仕様は、今後も少しずつ変わっていくかもしれません。
ですのであまり細かく気にせず捉えてほしいと思います。

一行テキスト なのか 一行スクリプト なのか

さらに細かい事を書いておきます。

今回の事は 一行スクリプト についての事でした。

一行テキスト で実行させた場合でなくても、 一行スクリプト で動作させた場合でも今回説明した事が動作するからです。

ならば、 「一行スクリプトの時のみの特別な仕様」 の括りの方に記入すべき事の様な気がしますが、 今回の事は、 一行スクリプト でも動作するものの、 二行以上のスクリプト の中にある 一行スクリプト では動作しないものになっています。
( 種類スクリプトアイテム の事です。 )

ですので、 「一行スクリプトの時のみの特別な仕様」 での 一行スクリプト とも少し違う場合の 一行スクリプト についての話になっています。

一行テキスト とも少し違いますがそれに近い場合の事なのでこちらのジャンル内に記入しておくことにしました。

実行元のテキストで動作する系の規定のコマンドについて

ここで説明する事は、 一行テキスト での特徴というより、 一行テキスト でしかできない事を書きます。

注意書きを書いている様なものです。

規定のコマンドの中には 一行テキスト から実行した場合でないと効果が無いものがあります。

辞書 の種類でしか説明していない事ですが、規定のコマンドには 7 種類のタイプがあります。

その種類の タイプ 1 と、 タイプ 2 の規定のコマンドが今回の言う 「 一行テキスト から実行した場合でないと効果が無いもの 」です。

ちなみに、 どの規定のコマンドがどのタイプに属するかは
このホームページの辞書のページで確認しない限り分かるようにはなっていません。

辞書 規定のコマンド

今回の言う、 一行テキスト から実行した場合でないと効果が無いものは、例えば以下の様なものがあります。
  • &sharpssCustom

    文字を # # で囲み、さらに \ も付ける。
    Alt+3 と同じ。

  • &parsentss

    文字を % % で囲む。 Alt+5 と同じ。

  • &fullPath

    絶対パスに変換する。 Alt+F と同じ。

  • &relativePath

    相対パスに変換する。 Alt+R と同じ。

  • &pathLink

    アイテム名 をリンク先に変換する。
    Alt+P と同じ。

  • &popList

    入力補完を表示する。 Ctrl+Space と同じ。

以上のものは 一行テキスト で実行させないと効果が無いものです。

これらが全てではありません。
タイプ 1 と、 タイプ 2 の規定のコマンドが今回の言う 「 一行テキスト から実行した場合でないと効果が無いもの 」です。

これらの規定のコマンドは、 テキスト の入力欄の文字を変換して テキスト の入力欄に再び再表示するものです。

そして、 テキスト の入力欄に再び再表示する場合、 「実行元の テキスト」 を判別できる状態である必要があります。

TRR のスクリプトの仕様上、 二行以上のスクリプト の場合、上記の規定のコマンドをその中で使うと「実行元の テキスト」 を判別できないという特徴があります。

一行テキスト で実行した場合は 「実行元の テキスト」 を判別できる状態で使用できます。
( 分割テキスト も含みます。 )

つまり、上記の規定のコマンドは 一行テキスト で実行しないと効果が無いものになっています。

さらに、 テキスト上のキー として使わないと効果が無いものが大半だったりします。

この事もまた、 一行テキスト の時のみの特徴の一つです。

補足

上記の、タイプ 1 やタイプ 2 の規定のコマンドを 一行テキスト 以外で使う方法として
&sendScriptToText を使うという方法があります。

&parsentss二行以上のスクリプト で使用したい場合があったとします。
その場合は、

&sendScriptToText %B_GuiNumText1% &parsentss

このスクリプトを使うと、 テキスト 1 を使って &parsentss を使う事と同じ動作をさせる事ができます。

ちなみに

&sendScriptToText any &parsentss

このスクリプトの様に、 anyテキスト のGui番号を指定する部分に使うと、最前面にある テキスト を使って動作をさせる事ができます。

Executor が付く名前の規定のコマンドを使うと、
実行元のテキストを認識して実行する。

ここで説明する事は、 一行テキスト での特徴という訳では無いのですが、上記で説明した事と関係している事なので、ここで説明しておきたい事です。

上記に説明した通り、 一行テキスト から実行した場合は「実行元の テキスト」 を認識できますが、 二行以上のスクリプト が関わると、実行元がどの テキスト なのかを認識できなくなります。

規定のコマンドの中には、名前の中に Executor がついているものがあります。

これは、 二行以上のスクリプト の中で使っても、実行元の テキスト を認識して実行元で動作するものを意味しています。

Executor が名前についている規定のコマンドは以下のものがあります。

  • &guiHideTextExecutor

    実行元の テキスト を閉じる。

  • &guiShowWaitExecutor

    実行元の テキスト を指定秒後に表示する。

  • &guiHideAndShowWaitExecutor

    実行元の テキスト を一度閉じて、指定秒後にまた表示する。

  • &hideInputListExecutor

    入力補完を非表示にする。 実行元の テキスト の入力補完を認識できる。

  • &outArgsToTextEditExecutor

    引数の文字を実行元の テキスト に出力する。

    前にあった文字は消して上書きで出力する。
    分割テキスト で動作させていた場合、フォーカスがある入力欄に文字を出力する。

  • &sendEndToTextEditExecutor

    実行元の テキスト のカーソルを右端に移動する。

    分割テキスト で動作させていた場合、フォーカスがある入力欄のカーソルを移動する。

これらは、 二行以上のスクリプト の中で使っても、実行元の テキスト を認識して、それに対して動作をさせる事が可能です。

「一行スクリプトの時の特別な仕様」は以上です。

長々と色々書きましたが、知って為になる内容でも無いため、ここでは 一行スクリプト二行以上のスクリプト では違う部分があると知っておくだけで十分だと思います。