== startdoc = myarghelper.ext.txt ;;; -*- outline-tree: hierarchy-star -*- $Filename: myarghelper.exe.txt $ $Lastupdate: 2018-01-03 15:51:37 $ -------------------------------------------------------- * myarghelper.exe の目的 myarghelper.exe は ArgHelper.exe の機能を拡張するものです。 ArgHelper.exe は、Gentaro Muramatsu さんが作成したプログラムで、myarghelper.exe はその機能を参考にして作成したものです。 ◇ ArgHelper.exe の概要 ArgHelper.exe は、Gentaro Muramatsu さんが作成したもので、C++ を使って作成されていて、ソースも公開されています。 ※ (Net "https://sourceforge.net/p/sakura-editor/wiki/ExtTools/") から 取得できます。 ArgHelper.exe // Copyright (C) 2000, Gentaro Muramatsu ArgHelper.exe は、それを hoge.exe のような任意の基幹部分の名前 (この例では hoge) を持ち、拡張子が .exe のファイル名を持つファイルに複写して使用します。 つまり、 $ copy ArgHelper.exe hoge.exe のようにして、hoge.exe を作成します。以下、使い方を説明するときに、このようにして hoge.exe を作成したものとします。 hoge.exe (元は、ArgHelper.exe) が実行されると、自分の名前のhoge を基幹部分とし、拡張子が .ini のファイル、つまりhoge.ini を「設定ファイル」として読み込みます。hoge.ini は、hoge.exe と同じディレクトリに置かないといけません。 設定ファイルはつぎのような約束に従って、ユーザ(ArgHelper.exe をhoge.exe という名前でコピーした人) が作成します。 (形式) 1行目: 実行ファイル名 (絶対パス指定しか試していません) (例えば C:\Windows\notepad.exe) 2行目: コマンドラインオプション (例えば /P) 実行ファイル hoge.exe を実行すると,設定ファイル hoge.ini の1行目で指定したファイルが実行されます.このとき,設定ファイル hoge.ini の2行目に書いたオプションと実行時に与えられたオプションを空白1つで接続したものが引数として与えられます。hoge.ini の内容が C:\Windows\notepad.exe /P であるとして、 $ hoge.exe foobar.txt とすると、 $ C:\Windows\notepad.exe /P foobar.txt としたように動作します。 ◇ myarghelper.exe で変更した機能/追加した機能 myarghelper.exe は、C# を使って作成しました。 (1) 設定ファイルの拡張子を .ahp にしました。 ArgHelper.exe の場合は拡張子が、.ini でしたが、.ini という拡張子は良く使われるので、.ahp を採用しました。ArgHelPer のAHP です。 foo.exe と foo.ahp があれば、foo.exe が $ copy myarghelper.exe foo.exe として作られたということがすぐ分かるという利点があります。 (2) バージョン番号を表示するオプションを設けました。 $ myarghelper.exe /myarghelperversion とすると、myarghelper.exe のバージョン番号が表示されます。 当然ながら、myarghelper.exe を copy して作成された実行ファイル、例えば、 $ copy myarghelper.exe hoge.exe として作成された hoge.exe に対して $ hoge.exe /myarghelperversion とすると myarghelper.exe のバージョン番号が表示されます。 (3) Windows プログラムにしました。 myarghelper.exe は Windows プログラムです。コンソールプログラムではありません。 コンソールプログラムでは、myarghelper.exe の機能は、バッチファイルでおおむね実現できます。 (4) 設定ファイル(拡張子 .ahp を持つファイル)の仕様の変更。 myarghelper.exe は、ArgHelper.exe と同じ機能を持ちますが、少し機能を拡張しました。 ArgHelper.exe と同様に、myarghelper.exe を hoge.exe のように、任意の「基幹部分」の名前を持つファイルに複写して使用します。 $ copy myarghelper.exe hoge.exe こうして複写した hoge.exe があるディレクトリに「設定ファイル」を置きます。ただし、設定ファイルはただひとつではなくて、(あれば)複数の設定ファイルから実行時に選択するようにしました。 設定ファイルの選択のルールはつぎのようです。 1. まず、最初に、実行ファイルがあるディレクトリと同じディレ クトリに、 基幹部分の名前 + "For" + %COMPUTERNAME% + ".ahp" という名前のファイルがないかを探します。 myarghelper.exe を hoge.exe という名前で複写した場合で、 COMPUTERNAME が KUMANO の場合、 "hoge" + "For" + "KUMANO" + ".ahp" -> hogeForKUMANO.ahp です。 この形のファイルがあれば、それが「設定ファイル」として採 用されます。 hogeForYODO.ahp があっても、%COMPUTERNAME% が KUMANO であ るマシンでは、hogeForYODO.ahp は「設定ファイル」とは考え られません。 2. 前項で述べたように %COMPUTERNAME% が含まれる形の名前の 「設定ファイル」がない場合は、 基幹部分の名前 + ".ahp" というファイルがないかを探します。 myarghelper.exe を hoge.exe という名前で複写した場合は、 hoge.ahp です。そういう名前のファイルがあれば、それを「設定ファイ ル」として採用します。 3. 基幹部分の名前 + ".ahp" の形の名前のファイルもない場合は、 「設定ファイル」がないということになります。 「設定ファイル」がないと、エラーメッセージを表示する窓が ポップアップします。その窓の OK ボタンを押せば、なにもせ ずにプログラムは終了します。 4. hoge.exe (myarghelper.exe をコピーしたファイル) は、上述 したルールにしたがって、設定ファイルを選択し、それを読み 込みます。 設定ファイルの一行目に書いてあるコマンドに、設定ファイル の二行目に書いてある引数と、hoge.exe を実行するときに渡さ れた引数を加えて実行します。 例えば、hoge.exe の設定ファイルの一行目に C:\home\shiiba\bin\foo.exe と書いてあって、hoge.exe の設定ファイルの二行目に C:\script\bar.uws と書いてあり、hoge.exe の実行時に、Hello, world. という引 数を与えると、 C:\home\shiiba\bin\foo.exe C:\script\bar.uws Hello, world. が実行されます。 5. 設定ファイルの一行目に、絶対パスではなくて、相対パスを使 って実行するコマンドを書くことができます。 例えば、hoge.exe の設定ファイルの一行目に C:\home\shiiba\bin\foo.exe のように書いてあるのではなくて、 .\foo.exe のように相対パスで書いてあった場合は、hoge.exe (myarghelper.exe をコピーしたファイル)は、.\foo.exe の . を hoge.exe が置かれているディレクトリと解釈します。 従って、hoge.exe が c:\home\tak\bin にあれば、 c:\home\tak\bin\foo.exe が実行されます。 6. 設定ファイルの書き方につぎのような特別なルールを導入しま した。 設定ファイルの2行目に $(Arguments) という文字列があると、 実行時に与えられた引数の全体が、$(Arguments) に置き換えら れます。 $(Arguments) を使っている場合には、$(Argument1)、 $(Argument2)、$(Argument3) を使うことはできません。 $(Argument1) という文字列があると、実行時に与えられた引数 の1番目の引数に置き換えられます。 $(Argument2) という文字列があると、実行時に与えられた引数 の2番目の引数に置き換えられます。$(Argument1) を使ってい ないのに$(Argument2) を使うことはできません。 $(Argument3) という文字列があると、実行時に与えられた引数 の3番目の引数に置き換えられます。$(Argument2) を使ってい ないのに$(Argument3) を使うことはできません。 $(Argument4) は使うことができません。 7. 一行目に start.exe と書いてあった場合は、引数部分を arguments に格納したとして、 System.Diagnostics.Process.Start(arguments); のようにして、引数部分 arguments を関連付けによって開きます。 8. 実行時の引数の第一引数に限り、.\ で始まると、作業ディレク トリに置き換えられます。第一引数が "..." のように引用符号 で囲まれていると、引用符号の内側の最初が .\ で始まると、 作業ディレクトリに置き換えられます。 例えば、myarghelper.exe を runuws.exe という名前に複写して、 PS> cd c:\foo\bar PS> runuws .\foo.uws a b c のようにした場合、これは、 PS> runuws c:\foo\bar\foo.uws a b c のように実行したように動作します。 (重要) 「実行時の引数の第一引数」と設定ファイルの中に書く 引数とは異なることに注意してください。 9. [2015-04-22] 第一引数に //help を指定すると、コメントファ イルを start コマンドを使って表示します。 例えば、myarghelper.exe を hoge.exe という名前で複写した 場合は、 PS> hoge //help とすると、コメントファイル hoge.exe.txt が、hoge.exe があるディレクトリにあれば、それを、start コ マンドを使って表示します。 第一引数に //help が指定されたときに、標準出力にコメント ファイルを書き出したい気もします。しかしmyarghelper.exe は Windows プログラムであって、コンソールプログラムではな いので、コンソールに出力することができません。 -------------------------------------------------------- * 設定ファイル(拡張子が .ahp のファイル)の書き方 設定ファイルの一行目には、実行するプログラムのフルパスまたは、start.exe という文字列です。 設定ファイルの二行目には、引数を指定します。二行目には、$(Arguments)、$(Argment1)、$(Arguments2), $(Argument3) などの置き換え指定文字列を書くことができます。 設定ファイルの行頭に # を書いてある行はコメント行として読み飛ばされます。一行目、二行目というのは、コメント行を除いて考えたときの一行目、二行目を意味しています。 Dropbox のようにクラウドとそれに同期するディレクトリにファイルを置くことができる場合、そこに hoge.exe hogeForKUMANO.ahp hogeForYODO.ahp hoge.ahp のようなファイルを置くようにしておけば、KUMANO と YODO では、個別のマシン KUMANO, YODO 用の設定ファイルを読んでプログラムが実行され、それ以外のマシンでは、設定ファイル hoge.ahp を読んでプログラムが実行されます。 これにより、マシン毎に対応した実行条件を指定することができるようになります。例えば、 hogeForKUMANO.ahp の一行目 C:\tools\bin\Foo-11.exe hogeForYODO.ahp の一行目 C:\tools\bin\Foo-12.exe hoge.ahp の一行目 C:\tools\bin\Foo-10.exe となっていれば、hoge.exe を実行したとき、KUMANO、YODO、それ以外のマシンで、実際に実行されるプログラムが、C:\tools\bin\Foo-11.exe、C:\tools\bin\Foo-12.exe、C:\tools\bin\Foo-10.exe のように切り替えられることになります。 ◇ 環境変数の利用 AutoHotkey などでマシンによってインストール場所が異なっている場合には、前項で紹介した、hogeForKUMANO.ahp、hogeForYODO.ahp など、ahp ファイルの名前を利用してその違いを考慮することもできますが、マシンごとに環境変数 AutoHotkey にAutoHotkey のインストール先を指定しておいて、hoge.ahp の中に、 hoge.ahp の一行目 %AutoHotkey%\AutoHotkey.exe のように記述するという方法も利用できます。この機能は、[2016-08-02] に実現されました。 ◇ バージョン文字列の表示 $ myarghelper.exe /myarghelperversion とすると、myarghelper.exe のバージョン文字列を表示する窓がポップアップします。 -------------------------------------------------------- * 設定ファイルの記述例 hoge.exe の設定ファイル hoge.ahp の記述例。 @begin{hoge.ahp} --------------------------------------- # @(#) hoge.ahp # # $Filename: hoge.ahp $ # $Lastupdate: 2015-12-31 18:01:28 $ # # これは hoge.exe の設定ファイル(ahpfile)のサンプルです。 # # (1) 実行するプログラムのフルパスまたは相対パスまたは start.exe # 必須です。 # # start.exe を指定すると、2番目に指定する文字列をファイル名 # あるいは URL と見て、関連付けによって開きます。相対パスの # 場合、myarghelper.exe があるディレクトリからの相対パスと解 # 釈されます。 C:\home\shiiba\bin\MsgBox.exe # # (2) 引数 (必要でなければ無くても構いません。 # $(Arguments)、$(Argument1)、$(Argument2), $(Argument3) を # 文字列の中に含めることができます。 # # $(Arguments) を指定すると、myarghelper.exe を複写してでき # た名前のファイル hoge.exeに与えられたすべての引数が # $(Arguments) の位置に挿入されます。 # # $(Argument1) を指定すると、hoge.exe を呼び出したときの引数 # の1番目の引数が$(Argument1) の位置に挿入されます。 # # $(Argument1)、$(Argument2) を指定すると、hoge.exe を呼び出 # したときの引数の1番目の引数が$(Argument1) の位置に、2番目 # の引数が$(Argument2) の位置に挿入されます。 # # $(Argument1)、$(Argument2)、$(Argument3) を指定すると、 # hoge.exe を呼び出したときの引数の1番目の引数が$(Argument1) # の位置に、2番目の引数が$(Argument2) の位置に、3番目の引数 # が$(Argument3) の位置に挿入されます。 # -t:"hoge" # # ここの例のように設定すると、実行するコマンドラインとして # # C:\home\shiiba\bin\MsgBox.exe -t:"hoge" # # が用意され、hoge.exe を起動したときの引数が後に追加され # て実行されます。 # # たとえば、 # # hoge.exe Hello # # とすると、 # # C:\home\shiiba\bin\MsgBox.exe -t:"hoge" Hello # # が実行されます。 # # 実行プログラムとして、start.exe を指定して、 # 引数として、 # http://www.google.com/search?q=$(Arguments) # を指定すれば、google 検索できます。 @end{hoge.ahp} ----------------------------------------- -------------------------------------------------------- * //help $ hoge.exe //help のように引数に //help だけを指定すると、hoge.exe が置いてあるディレクトリにある hoge.exe.txt を start コマンドを用いて表示します。 -------------------------------------------------------- * アイコンの変更 myarghelper.exe をコピーして、つまり $ copy ArgHelper.exe hoge.exe のようにして、hoge.exe を作成したとして、hoge.exe のアイコン を別のものにしたいことがあるでしょう。 そのために、IconChanger.exe というプログラムが利用できます。 IconChanger http://aboon.s33.xrea.com/index.php?page=soft_iconchanger -------------------------------------------------------- * enddoc