• atwiki
  • HOMING★WONDER
  • [秀丸マクロ ファイルを開くダイアログを実行する]の変更点

「秀丸マクロ ファイルを開くダイアログを実行する」の編集履歴(バックアップ)一覧はこちら

秀丸マクロ ファイルを開くダイアログを実行する」(2010/12/28 (火) 15:39:52) の最新版変更点

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

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

[[秀丸パイプ>秀丸マクロ 外部プログラムから戻り値を得る方法 - 秀丸パイプの使い方]]とVBSを使って、マクロから「ファイルを開く」ダイアログを表示してみます。 標準入力を解析して、複数のパラメータを受け渡しするサンプルにもなっています。 使っている UserAccounts.CommonDialog が WindowsXP 専用であるため、他の環境では動かないそうです(Vista も不可!)。また、ダイアログ操作中は秀丸本体が軽くフリーズ状態となり、我ながら微妙なサンプルになっております。 *show_opendialog.vbs - UserAccounts.CommonDialog.ShowOpen() サンプル #html2(){<pre><code>Option Explicit '【初期処理】 Dim arg, arg_v, objDialog Set objDialog = CreateObject("UserAccounts.CommonDialog") '【標準入力を解析して動作設定】 arg_v = Split(WScript.StdIn.ReadLine, ",") For Each arg In arg_v Dim argKey argKey = Split(Trim(arg),"=",2) argKey(0) = LCase(argKey(0)) Select Case argKey(0) Case "filter" objDialog.Filter = argKey(1) ' Filter プロパティの設定 Case "filterid" objDialog.FilterIndex = argKey(1) ' FilterIndex プロパティの設定 Case "dir" objDialog.InitialDir = argKey(1) ' InitialDir プロパティの設定 Case "fname" objDialog.FileName = argKey(1) ' FileName プロパティの設定 End Select Next '【実行とエコーバック】 If objDialog.ShowOpen <> 0 Then Wscript.Echo objDialog.FileName End If WScript.Quit</code></pre>} UserAccounts.CommonDialog 自体の説明は、いつものようにサックリ飛ばします。基本的な使い方は&link_anchor(ms_ref){こちらをご覧になる}か、検索すれば他のサンプルがヒットすることでしょう。 【初期処理】 #divclass(marginleft16){ CreateObject でコモンダイアログを生成しています。(これがXP専用なのがネックです…) } 【標準入力を解析して動作設定】 #divclass(marginleft16){ 今回のハイライトです。標準入力に複数のパラメータを送るサンプルになっています。 ここでは、キーと値をセットにして、一行に複数の値が並んだ書式を解析しています。PerlなどでURLエンコードをやったことのある人はピンときたかもしれませんが、次のような書式を想定しています。 #html2(){<pre>キー=値,キー=値,...,キー=値</pre>} 今回は、キーに指定された項目別に UserAccounts.CommonDialog に設定を与えたいので、具体的にはこんな書式を解析できると便利ですね。 #html2(){<pre>filter=Filterの設定値,filterid=FilterIndexの設定値,...,fname=FileNameの設定値</pre>} コードの方はまず、最初の Split() で "," ごとに分解し、"キー=値" の文字列グループに換えてから For Each 構文に渡しています。そして For Each ループ中で受け取った個別の "キー=値" について、もう一度 "=" を区切りに使って Split() し、キーと値を分離しています。そこから先は簡単で、Case 構文を使ってキーごとに処理をふりわけています。Trim() と LCase() についは、なんとなくのオマケ機能です。カンマ前後の空白切除や、”キーについては大文字小文字を不問”にした方が便利そうなんじゃないかなぁ、と。 "キー=値" を並べるやり方は順番や個別省略が自在で、プログラム的にも短くカスタマイズが簡単です。スクリプトには都合の良いテクニックですね。 } 【実行とエコーバック】 #divclass(marginleft16){ ダイアログを表示し、ファイルが選択されたら標準出力にエコーして、キャンセル時にはなにも出力せず終了します。 } *秀丸パイプを使ったマクロからの呼び出し #html2(){<pre><code>loaddll "HmPipe.hmf"; message dllfuncstr("HmPipeRun", "Filter=All Files|*.*,Dir=C:&#165;&#165;,fname=TestView", &#9;&#9;&#9;"cscript.exe", "//nologo show_opendlg.vbs"); freedll; endmacro;</code></pre>} 設定を施してスクリプトを呼び出しています。フィルターは All Files、最初に開く場所を C:&#165; に設定し、デフォルトのファイル名を "TestView" としています。 -実行結果 &image(fileopen.jpg) ---- 【注意】 なお秀丸パイプ作動中は制御がそっちに移りっきりなので、ダイアログ選択中は秀丸がフリーズしてしまいます。このダイアログに親ウィンドウとして秀丸を登録する、手軽な方法でもあればどうにかなりそうですが、どうしても本格的なハックになりそうです。秀丸としても DLL 関数がビジーな状態までは意識していないでしょうから、ここはもう本家 run 命令の標準入出力サポートを信じて待つしかありません。 -&aname(ms_ref,option=nolink){参考} [[MicrosoftTechNet / Hey, Scripting Guy! - ファイルを選択するためのダイアログ ボックスを表示する方法はありますか>>http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/jan05/hey0128.mspx]] さらに詳しいフィルター設定など、マイクロソフト純正のサンプルが載っています。 ----
#include_js(http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/shCore.js) #include_js(http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/shBrushCpp.js) #include_js(http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/shBrushVb.js) [[秀丸パイプ>秀丸マクロ 外部プログラムから戻り値を得る方法 - 秀丸パイプの使い方]]とVBSを使って、マクロから「ファイルを開く」ダイアログを表示してみます。 標準入力を解析して、複数のパラメータを受け渡しするサンプルにもなっています。 使っている UserAccounts.CommonDialog が WindowsXP 専用であるため、他の環境では動かないそうです(Vista も不可!)。また、ダイアログ操作中は秀丸本体が軽くフリーズ状態となり、我ながら微妙なサンプルになっております。 *show_opendialog.vbs - UserAccounts.CommonDialog.ShowOpen() サンプル #html2(){<pre name="code" class="vb:nocontrols">Option Explicit '【初期処理】 Dim arg, arg_v, objDialog Set objDialog = CreateObject("UserAccounts.CommonDialog") '【標準入力を解析して動作設定】 arg_v = Split(WScript.StdIn.ReadLine, ",") For Each arg In arg_v Dim argKey argKey = Split(Trim(arg),"=",2) argKey(0) = LCase(argKey(0)) Select Case argKey(0) Case "filter" objDialog.Filter = argKey(1) ' Filter プロパティの設定 Case "filterid" objDialog.FilterIndex = argKey(1) ' FilterIndex プロパティの設定 Case "dir" objDialog.InitialDir = argKey(1) ' InitialDir プロパティの設定 Case "fname" objDialog.FileName = argKey(1) ' FileName プロパティの設定 End Select Next '【実行とエコーバック】 If objDialog.ShowOpen <> 0 Then Wscript.Echo objDialog.FileName End If WScript.Quit</pre>} UserAccounts.CommonDialog 自体の説明は、いつものようにサックリ飛ばします。基本的な使い方は&link_anchor(ms_ref){こちらをご覧になる}か、検索すれば他のサンプルがヒットすることでしょう。 【初期処理】 #divclass(marginleft16){ CreateObject でコモンダイアログを生成しています。(これがXP専用なのがネックです…) } 【標準入力を解析して動作設定】 #divclass(marginleft16){ 今回のハイライトです。標準入力に複数のパラメータを送るサンプルになっています。 ここでは、キーと値をセットにして、一行に複数の値が並んだ書式を解析しています。PerlなどでURLエンコードをやったことのある人はピンときたかもしれませんが、次のような書式を想定しています。 #html2(){<pre>キー=値,キー=値,...,キー=値</pre>} 今回は、キーに指定された項目別に UserAccounts.CommonDialog に設定を与えたいので、具体的にはこんな書式を解析できると便利ですね。 #html2(){<pre>filter=Filterの設定値,filterid=FilterIndexの設定値,...,fname=FileNameの設定値</pre>} コードの方はまず、最初の Split() で "," ごとに分解し、"キー=値" の文字列グループに換えてから For Each 構文に渡しています。そして For Each ループ中で受け取った個別の "キー=値" について、もう一度 "=" を区切りに使って Split() し、キーと値を分離しています。そこから先は簡単で、Case 構文を使ってキーごとに処理をふりわけています。Trim() と LCase() についは、なんとなくのオマケ機能です。カンマ前後の空白切除や、”キーについては大文字小文字を不問”にした方が便利そうなんじゃないかなぁ、と。 "キー=値" を並べるやり方は順番や個別省略が自在で、プログラム的にも短くカスタマイズが簡単です。スクリプトには都合の良いテクニックですね。 } 【実行とエコーバック】 #divclass(marginleft16){ ダイアログを表示し、ファイルが選択されたら標準出力にエコーして、キャンセル時にはなにも出力せず終了します。 } *秀丸パイプを使ったマクロからの呼び出し #html2(){<pre name="code" class="cpp:nocontrols">loaddll "HmPipe.hmf"; message dllfuncstr("HmPipeRun", "Filter=All Files|*.*,Dir=C:&#165;&#165;,fname=TestView", &#9;&#9;&#9;"cscript.exe", "//nologo show_opendlg.vbs"); freedll; endmacro;</pre>} 設定を施してスクリプトを呼び出しています。フィルターは All Files、最初に開く場所を C:&#165; に設定し、デフォルトのファイル名を "TestView" としています。 -実行結果 &image(fileopen.jpg) ---- 【注意】 なお秀丸パイプ作動中は制御がそっちに移りっきりなので、ダイアログ選択中は秀丸がフリーズしてしまいます。このダイアログに親ウィンドウとして秀丸を登録する、手軽な方法でもあればどうにかなりそうですが、どうしても本格的なハックになりそうです。秀丸としても DLL 関数がビジーな状態までは意識していないでしょうから、ここはもう本家 run 命令の標準入出力サポートを信じて待つしかありません。 -&aname(ms_ref,option=nolink){参考} [[MicrosoftTechNet / Hey, Scripting Guy! - ファイルを選択するためのダイアログ ボックスを表示する方法はありますか>>http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/jan05/hey0128.mspx]] さらに詳しいフィルター設定など、マイクロソフト純正のサンプルが載っています。 ---- #javascript(){{ <script type="text/javascript"><!-- dp.SyntaxHighlighter.ClipboardSwf = 'http://www31.atwiki.jp/kouraku_tiritomado/pub/SyntaxHilighter/Scripts/clipboard.swf'; dp.SyntaxHighlighter.HighlightAll('code'); //--></script> }}

表示オプション

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