• atwiki
  • HOMING★WONDER
  • [秀丸マクロ 外部プログラムから戻り値を得る方法 - 秀丸パイプの使い方]の変更点

「秀丸マクロ 外部プログラムから戻り値を得る方法 - 秀丸パイプの使い方」の編集履歴(バックアップ)一覧はこちら

秀丸マクロ 外部プログラムから戻り値を得る方法 - 秀丸パイプの使い方」(2009/11/11 (水) 17:26:31) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

run や runsync などに、WSHのようなスクリプトを組み合わせれば、秀丸マクロがサポートしていない機能を簡単に実装できそうです。 しかし、実行した外部プログラムから秀丸マクロへと、戻り値の感覚で何らかのデータを戻す方法がサポートされていません(※)。 投げっぱなししか出来ないのでは、おいしくありません。 そこで登場するのが m.fujimoto氏作成の「秀丸パイプ」(HmPipe.hmf)です。秀まるおのHP > 変換モジュールライブラリ から DL 出来ます。 この DLL を使えば、外部プログラムの処理結果(標準出力)をマクロ変数として簡単にゲットできます。 (※)run &sizex(-2){なら標準入出力にタッチできますが、最終的に変数として値を持ってこれません。将来的には正式に対応の予定があるようですが、現在のところ一時ファイル化したり、その後始末など、おいしくない問題が多いです。今は大人しく、この秀丸パイプの恩恵を最大限にいかしましょう。} *秀丸パイプの使い方 #html2(){<pre><code>loaddll "HmPipe.hmf"; // 秀丸パイプの動的リンクです $outstr = dllfuncstr("HmPipeRun", 入力文字列, 実行ファイルパス, 実行ファイル引数 ); freedll; // loaddllしたライブラリを解放します</code></pre>} -loaddll 任意のライブラリ / freedll ... #divclass(marginleft16){ 任意のライブラリをロード / 解放します。解放するまで、ロードしたライブラリの関数機能を呼び出すことが出来ます。 ロードできるライブラリは一つです。何度か loaddll を呼んで複数のライブラリをロードしても、自動的にそれ以前のライブラリは freedll されます。 重大なお約束として、使い終わったライブラリは必ず解放するようにしましょう。 } -dllfuncstr ( 関数名 [,...] ) ... #divclass(marginleft16){ 関数名を指定して、ライブラリから任意の関数を呼び出します。二個目以降の引数には、数値、文字列などを自由に記述できます。 } -dllfuncstr("HmPipeRun", 入力文字列, 実行ファイルパス, 実行ファイル引数 ) ... #divclass(marginleft16){ 秀丸パイプから、HmPipeRun という関数を呼び出します。HmPipeRun 関数は基本的に run 系命令の上位版ですが、最大の特徴として "入力文字列" を標準入力として渡し、戻り値として標準出力を文字列型で取得できます。 とりあえず入力文字列を2回繰り返して標準出力に返してみましょう。 -秀丸マクロからの呼び出し #html2(){<pre><code>loaddll "HmPipe.hmf"; // 秀丸パイプの動的リンクです message dllfuncstr("HmPipeRun", "hoge", "cscript.exe", "//nologo test.vbs" ); freedll; // loaddllしたライブラリを解放します</code></pre>} -test.vbs #html2(){<pre><code>Option Explicit '標準入力を取得 Dim output output = WScript.StdIn.ReadAll '標準出力に書き出し Wscript.Echo output Wscript.Echo output Wscript.Quit</code></pre>} -実行結果 &image(hogehoge.jpg) MSDN によると、StdIn が読めるのは CScript.exe だけで、WScript.exe ではムリだそうです。 CScript.exe には、実行引数として nologo オプションを指定しておかないと StdOut に熱心なコーポレートロゴが書き込まれます。迷惑な…。 } ----
run や runsync などに、WSHのようなスクリプトを組み合わせれば、秀丸マクロがサポートしていない機能を簡単に実装できそうです。 しかし、実行した外部プログラムから秀丸マクロへと、戻り値の感覚で何らかのデータを戻す方法がサポートされていません(※)。 投げっぱなししか出来ないのでは、おいしくありません。 そこで登場するのが m.fujimoto氏作成の「秀丸パイプ」(HmPipe.hmf)です。秀まるおのHP > 変換モジュールライブラリ から DL 出来ます。 この DLL を使えば、外部プログラムの処理結果(標準出力)をマクロ変数として簡単にゲットできます。 (※)run &sizex(-2){なら標準入出力にタッチできますが、最終的に変数として値を持ってこれません。将来的には正式に対応の予定があるようですが、現在のところ一時ファイル化したり、その後始末など、おいしくない問題が多いです。今は大人しく、この秀丸パイプの恩恵を最大限にいかすとしましょう。} *秀丸パイプの使い方 #html2(){<pre><code>loaddll "HmPipe.hmf"; // 秀丸パイプの動的リンクです $outstr = dllfuncstr("HmPipeRun", 入力文字列, 実行ファイルパス, 実行ファイル引数 ); freedll; // loaddllしたライブラリを解放します</code></pre>} -loaddll 任意のライブラリ / freedll ... #divclass(marginleft16){ 任意のライブラリをロード / 解放します。解放するまで、ロードしたライブラリの関数機能を呼び出すことが出来ます。 ロードできるライブラリは一つです。何度か loaddll を呼んで複数のライブラリをロードしても、自動的にそれ以前のライブラリは freedll されます。 重大なお約束として、使い終わったライブラリは必ず解放するようにしましょう。 } -dllfuncstr ( 関数名 [,...] ) ... #divclass(marginleft16){ 関数名を指定して、ライブラリから任意の関数を呼び出します。二個目以降の引数には、数値、文字列などを自由に記述できます。 } -dllfuncstr("HmPipeRun", 入力文字列, 実行ファイルパス, 実行ファイル引数 ) ... #divclass(marginleft16){ 秀丸パイプから、HmPipeRun という関数を呼び出します。HmPipeRun 関数は基本的に run 系命令の上位版ですが、最大の特徴として "入力文字列" を標準入力として渡し、戻り値として標準出力を文字列型で取得できます。 とりあえず入力文字列を2回繰り返して標準出力に返してみましょう。 -秀丸マクロからの呼び出し #html2(){<pre><code>loaddll "HmPipe.hmf"; // 秀丸パイプの動的リンクです message dllfuncstr("HmPipeRun", "hoge", "cscript.exe", "//nologo test.vbs" ); freedll; // loaddllしたライブラリを解放します</code></pre>} -test.vbs #html2(){<pre><code>Option Explicit '標準入力を取得 Dim output output = WScript.StdIn.ReadAll '標準出力に書き出し Wscript.Echo output Wscript.Echo output Wscript.Quit</code></pre>} -実行結果 &image(hogehoge.jpg) MSDN によると、StdIn が読めるのは CScript.exe だけで、WScript.exe ではムリだそうです。 CScript.exe には、実行引数として nologo オプションを指定しておかないと StdOut に熱心なコーポレートロゴが書き込まれます。迷惑な…。 } ----

表示オプション

横に並べて表示:
変化行の前後のみ表示:
記事メニュー
目安箱バナー