[ヘルプTop] [戻る]

コマンド定義ファイル

 スクリプトや各種外部実行ファイルなどと、キーやメニューなどに割り当てるIDを紐付け、キー割り当てやメニューなどで呼び出す設定ができるようになります。
 あくまでIDと連動コマンドを紐づける目的のファイルですので、コマンドライン指定で本体のリストで選択しているアイテムとの連動の用途はできません。
 コマンドライン連動をする場合は、下記のScriptCommand.txtでIDとスクリプトコマンドファイルを登録して、その内で動作を記述してください。
 (スクリプトファイルの生成は、ユーザー定義バーにドラッグアンドドロップをすることで、簡易的に作成する事ができます。詳細はバースクリプトコマンドフォルダースクリプトコマンドの説明を参照ください)
 設定ファイル構成図

ファイル概要

ExternalDefCommand.txt

 標準外部コマンドの定義ファイル。
 公式提供のコマンド郡が定義されております。
 バージョンアップ時に強制的に上書きされることがあるので、注意してください。

ExternalUserCommand.txt

 ユーザー用外部コマンドの定義ファイル。
 ユーザーさんによる、外部呼出しコマンドを設置する場合はこちらを使用してください。
 上書きされることはありませんので、ご自由にご利用ください。

UserMenuCommand.txt

 ユーザーさんが独自のポップアップメニューを作成する場合に使用します。
 上書きされることはありませんので、ご自由にご利用ください。

ScriptCommand.txt

 拡張子を判別して実行や、ウィンドウを開くなどといったスクリプトを
 スクリプトコマンドを実行します。
 上書きされることはありませんので、ご自由にご利用ください。
 なおコマンドIDの40001~40003までは、予約されておりますので使用しないでください。

ScriptNaviCommand.txt

 フォルダー上にフォーカスがあると、下位階層に移動します。
 Enterキーとの組み合わせで、ビューアーで開く+フォルダー選択していればナビゲーション、といった動作を行わせるために使用されます。
 上書きされることはありませんので、ご自由にご利用ください。
 なおコマンドIDの40501~40503までは、予約されておりますので使用しないでください。

PlugInCommand.txt

 フォルダー上にフォーカスがあると、下位階層に移動します。
 旧作用に作られたプラグインを登録できます。
 外部コマンドは、サンプルでも少々難易度の高めのことをやってますので、こちらで簡易的な実装をするのも良いでしょう。
 内部情報や、本体に対してメッセージを送っているような一部のプラグインは動作しません。

書式

 フォルダー上にフォーカスがあると、下位階層に移動します。
 文字コードは、UTF-16(BOMの有無はどちらでも良いUNICODE、リトルエンディアン)
 空行や、先頭が「//」で始まる行はコメントとみなされます。
 書式はタブ区切りで、4または5つの項目を指定します。(規定数の項目が存在しない場合は、コメントとみなされます)
 「コマンドID<TAB>ファイル情報の送信手順(省略可能)<TAB>コマンドの呼び出しの抑止モード<TAB>コマンドのフルパス<TAB>説明」
 起動ディレクトリは、常にコマンドのフルパスで指定した実行ファイルの存在するディレクトリになります。
 行の先頭に「EOF」が記述されていると、その時点でファイルの読み込みを中断します。

1.コマンドID

 フォルダー上にフォーカスがあると、下位階層に移動します。
 このファイルの先頭に記述されている有効IDの範囲で指定してください。
 具体的には「PostMessage(WM_COMMAND, コマンドID);」のような形でメッセージ処理されています。
 コマンドIDをキーにしてマップで管理しているので、同じIDが出てきた場合は後に出現した方を優先します。

2.ファイル情報の送信手順(手順の記述は省略可能ですがタブ文字は必須です)

 フォルダー上にフォーカスがあると、下位階層に移動します。
 ドラッグアンドドロップモードで記述が省略された場合は、連動しないものとみなされます。
 送信対象のアイテムは、下記の一文字以上を連結させる事で、異なる種類のアイテムを複数回に分けてD&Dで送信することができます。

  C:カレントディレクトリをD&Dで通知
  S:選択アイテムをD&Dで通知
  T:画面分割モードの場合、反対側のウィンドウの現在のパスをD&Dで通知(画面分割モード用のコマンドで使用。仮想フォルダーを含まない)
  ※D&Dで通知する場合の動作の補足
   タブグループが存在する場合は、各タブグループのアクティブパス(現在のタブグループのアクティブタブは含まない)
   タブグループが存在しない場合は、アクティブタブ以外のパス
   他のタブが一切存在しない場合は、カレントパス
   (例:”CS”を指定するとWM_DROPFILEが2回発生して値が渡される、1回目はカレントディレクトリで、2回目は選択したファイル全てとなる)
  X:WM_COPYDATAでメッセージ送信
  M:共有メモリによるプロセス間通信

※ScriptCommand.txt、ScriptNaviCommand.txt、UserMenuCommand.txt、PlugInCommand.txtの場合は指定しても無視されます。

※動作の特徴
 a)ドラッグアンドドロップ(C/S/T)
  後述の送信対象で指定されたアイテムを、起動したアプリケーションのトップウィンドウにWM_DROPFILEで送信します。
  (起動したアプリケーションがD&Dを受け付けない場合は動作しません)
  比較的多くのアプリケーションが対応しているので、各種アプリケーションを置き換えるのに使用できるかもしれません。
  送信対象が未指定である場合は、連携なしの動作になります。

 b)WM_COPYDATAによる通信(X)
  D&Dは渡すファイル数が5,000個あたりから性能が劣化しはじめ、1万ファイルくらいになるともはや実用にならなくなります。
  そこで、高速型のプロセス間通信としてWM_COPYDATAを用いて、テキスト形式でファイル情報を送信するモードを用意しています。
  「選択数\t対象数\t現在のディレクトリ\tオプション\t選択アイテム・・・\tターゲットアイテム・・・・」の書式のタブ区切り文字で渡されます。
  専用に作られたアプリケーションでしか使えないため汎用性はありません。
  具体的な使い方は、サンプルソースを参照ください。

 c)共有メモリによるプロセス間通信(M)
  さらに速度を求める場合や、メモリ使用量が少なく、甚大な量のデータを通信する場合に使用する際に使用します。
  また、環境によってC/S/T/Xなどのメッセージ送信の仕組みが動作しない場合の代替手段という側面もあります。
  共有メモリ内の書式は、XのWM_COPYDATAの送信電文と同じフォーマットです。
  専用に作られたアプリケーションでしか使えないため汎用性はありません。
  具体的な使い方は、外部コマンドのサンプルソースを参照ください。

3.コマンドの呼び出しの抑止モード

 フォルダー上にフォーカスがあると、下位階層に移動します。
 以下の条件に一致しない場合はコマンドを実行しない、必ず3文字で指定すること。

 a)1文字目、連携条件
  「N」:実体を持つフォルダーである場合に実行。ファイル/ディレクトリの選択状態と連動する。
  「X」:無条件で実行。実体のあるファイル/ディレクトリに加えて、仮想名称のファイル/ディレクトリの選択状態とも実体名で連動する。
  「A」:無条件で実行。以下のF/Dの指定を無視して選択があれば連動、選択がなければそのまま起動する。(実体があるもののみ)
  「B」:無条件で実行。以下のF/Dの指定を無視して選択があれば連動、選択がなければそのまま起動する。(実態を持たない場合も連動)
  「-」:無条件で実行。ファイル/ディレクトリ選択状態と連動しない。リストの選択状態と無関係な場合に使用する。

 b)2文字目、ファイル連携条件
  「F」:ファイルを1つ以上選択していないと、コマンド実行しないように制限する。
  「-」:連携しない。

 c)3文字目、ディレクトリ連携条件
  「D」:ディレクトリを1つ以上選択していないと、コマンド実行しないように制限する。
  「-」:制限なし。

 例)
  NFD:実体を持つフォルダーで、フォルダーかファイルが1つ以上選択されていれば呼び出し。
  NF-:実体を持つフォルダーで、ファイルが1つ以上選択されていれば呼び出し。
  N--:実体を持つフォルダーで、選択状態の連携はしない。
  ---:無条件で呼び出し、選択状態の連携はしない。
 ※例えば、解凍コマンドでフォルダーが選択されたり、ファイルが選択されてない状態で呼び出されると困るわけです。
  そういった状態を抑止するための制御機構です。
 ※「X」の指定は、仮想フォルダや仮想アイテムも渡すことが可能です。
  ただ、一般的に仮想名称を渡されて動作するアプリケーションは、ほとんど出回っていないため、あまり有用性はありません。
  As/Rに付属のコマンドではFileNameCp.exe(ファイル名をクリップボードにコピー)などが対応していますので、興味がありましたら設定を変更してみてください。
  コントロールパネルなども「::{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}」のような名称がクリップボードにコピーされます。
 ※「A」「B」の指定は、呼ばれる側のスクリプトや実行コマンドで起動ディレクトリの判定と、選択状態の有無を判定する必要があります。
  コマンドの作成能力が必要な上級者向けの機能になります。

4.コマンドのフルパス

 フォルダー上にフォーカスがあると、下位階層に移動します。
 起動するアプリケーションをフルパスで記述します。

※選択したファイル名をコマンドラインで渡すことはできません。
 (例えば1万個のファイル選択していたら、コマンドラインでは渡し切れない)
 前述の「ファイル情報の送信手順」で連携するか、スクリプトコマンドを経由して渡すようにすると良いでしょう。
 スクリプトコマンドを経由するサンプルとして、「エディタで開く」や「ビューアで開く」コマンドなどが参考になるでしょう。


 ■専用置換マクロ
 専用のマクロとして下記の置換マクロが使用できます。
 なお、一般環境変数と区別を付けるために優先的に判定を行い、大文字/小文字の区別を行います。

アプリケーションパス以下のディレクトリ
%App_Dir%As/Rのインストールディレクトリ。末尾に\を付与。
%Viewer_Dir%ビューアのパス。末尾に\を付与。
%CMD_Dir%標準のコマンド郡が格納されたパス。末尾に\を付与。
%UserCmd_Dirユーザー拡張用のコマンドを配置するように用意されたパス。末尾に\を付与。
ユーザーディレクトリ以下のディレクトリ
%User_dir%ユーザーディレクトリ。末尾に\を付与。
%Menu_dir%ユーザー定義メニューを格納するために用意されたパス。末尾に\を付与。
%Script_dir%スクリプトコマンドを格納するために用意されたパス。末尾に\を付与。
%CmdPlugin_Dir%プラグインコマンドを格納するために用意されたパス。末尾に\を付与。
特殊パス
%NowDir%現在のフォルダー。末尾に\なし。「”」括り。
%Current%現在のフォルダー。末尾に\なし。
%Drive%現在のドライブ名。
%Dir%現在のドライブ名を付与しないディレクトリ名。
?NowDir?現在のフォルダー。末尾に\なし。「”」括り。前作と互換性維持のためだけに残っています。

 ■一般環境変数
  システム側が判定するので、大・小文字の区別はありません。
  専用の置換マクロのあとに判定されます。
  一般的に設定されているであろう、パスの例を示します。

一時記憶フォルダー%TEMP%、%TMP%
オペレーティングシステム%OS%
コンピュータ名%COMPUTERNAME%
システムドライブ%SystemDrive%
システムフォルダー%Systemroot%、%WINDIR%
ドメイン名%USERDOMAIN%
プログラム用トップディレクトリ%ProgramFiles%
プログラム用共通ディレクトリ%CommonProgramFiles%
ログオンサーバ%LOGONSERVER%
ユーザー名%USERNAME%
ALL Usersユーザープロファイルフォルダー%ALLUSERSPROFILE%
Userユーザープロファイルフォルダー%USERPROFILE%
Userユーザープロフィールデータ保存先%APPDATA%
  ※OS側へ設定しているものが他にも存在していれば有効になります。

5.説明

 ステータスバーや、各種の設定画面でコマンドの説明として使用されます。
 また、この設定ファイルの可読性を上げる目的もあります。

※補足
 ExternalDefCommand.txt、ExternalUserCommand.txt、ScriptCommand.txt、ScriptNaviCommand.txt、UserMenuCommand.txt、PlugInCommand.txtの内容は、書式は全く同じですし、処理の分岐はコマンドIDの範囲で決定されるので、同じファイルに書いても構いません。
 ただアップデートで問答無用で更新されてしまうもの、ユーザーさんによる修正が前提であるもの、用途が限定されるものなどの観点から、機能毎に別のファイルに分けられています。

※補足
 この定義ファイルはシェル実行ではありませんので、vbsファイルやwshファイルのように実行ファイルに関連付けされているようなものは、直接起動できません。
 関連付け元のexeから記述するか、スクリプト経由で呼び出すようにしてください。