HOMING★WONDER
秀丸マクロ ファイルを開くダイアログを実行する
最終更新:
kouraku_tiritomado
-
view
include_js plugin Error : このプラグインで利用できない命令または文字列が入っています。
秀丸パイプとVBSを使って、マクロから「ファイルを開く」ダイアログを表示してみます。
標準入力を解析して、複数のパラメータを受け渡しするサンプルにもなっています。
標準入力を解析して、複数のパラメータを受け渡しするサンプルにもなっています。
使っている UserAccounts.CommonDialog が WindowsXP 専用であるため、他の環境では動かないそうです(Vista も不可!)。また、ダイアログ操作中は秀丸本体が軽くフリーズ状態となり、我ながら微妙なサンプルになっております。
show_opendialog.vbs - UserAccounts.CommonDialog.ShowOpen() サンプル
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
UserAccounts.CommonDialog 自体の説明は、いつものようにサックリ飛ばします。基本的な使い方はこちらをご覧になるか、検索すれば他のサンプルがヒットすることでしょう。
【初期処理】
CreateObject でコモンダイアログを生成しています。(これがXP専用なのがネックです…)
【標準入力を解析して動作設定】
今回のハイライトです。標準入力に複数のパラメータを送るサンプルになっています。
ここでは、キーと値をセットにして、一行に複数の値が並んだ書式を解析しています。PerlなどでURLエンコードをやったことのある人はピンときたかもしれませんが、次のような書式を想定しています。
ここでは、キーと値をセットにして、一行に複数の値が並んだ書式を解析しています。PerlなどでURLエンコードをやったことのある人はピンときたかもしれませんが、次のような書式を想定しています。
キー=値,キー=値,...,キー=値
今回は、キーに指定された項目別に UserAccounts.CommonDialog に設定を与えたいので、具体的にはこんな書式を解析できると便利ですね。
filter=Filterの設定値,filterid=FilterIndexの設定値,...,fname=FileNameの設定値
コードの方はまず、最初の Split() で "," ごとに分解し、"キー=値" の文字列グループに換えてから For Each 構文に渡しています。そして For Each ループ中で受け取った個別の "キー=値" について、もう一度 "=" を区切りに使って Split() し、キーと値を分離しています。そこから先は簡単で、Case 構文を使ってキーごとに処理をふりわけています。Trim() と LCase() についは、なんとなくのオマケ機能です。カンマ前後の空白切除や、”キーについては大文字小文字を不問”にした方が便利そうなんじゃないかなぁ、と。
"キー=値" を並べるやり方は順番や個別省略が自在で、プログラム的にも短くカスタマイズが簡単です。スクリプトには都合の良いテクニックですね。
【実行とエコーバック】
ダイアログを表示し、ファイルが選択されたら標準出力にエコーして、キャンセル時にはなにも出力せず終了します。
秀丸パイプを使ったマクロからの呼び出し
loaddll "HmPipe.hmf"; message dllfuncstr("HmPipeRun", "Filter=All Files|*.*,Dir=C:¥¥,fname=TestView", "cscript.exe", "//nologo show_opendlg.vbs"); freedll; endmacro;
設定を施してスクリプトを呼び出しています。フィルターは All Files、最初に開く場所を C:¥ に設定し、デフォルトのファイル名を "TestView" としています。
- 実行結果
【注意】
なお秀丸パイプ作動中は制御がそっちに移りっきりなので、ダイアログ選択中は秀丸がフリーズしてしまいます。このダイアログに親ウィンドウとして秀丸を登録する、手軽な方法でもあればどうにかなりそうですが、どうしても本格的なハックになりそうです。秀丸としても DLL 関数がビジーな状態までは意識していないでしょうから、ここはもう本家 run 命令の標準入出力サポートを信じて待つしかありません。
なお秀丸パイプ作動中は制御がそっちに移りっきりなので、ダイアログ選択中は秀丸がフリーズしてしまいます。このダイアログに親ウィンドウとして秀丸を登録する、手軽な方法でもあればどうにかなりそうですが、どうしても本格的なハックになりそうです。秀丸としても DLL 関数がビジーな状態までは意識していないでしょうから、ここはもう本家 run 命令の標準入出力サポートを信じて待つしかありません。
MicrosoftTechNet / Hey, Scripting Guy! - ファイルを選択するためのダイアログ ボックスを表示する方法はありますか
さらに詳しいフィルター設定など、マイクロソフト純正のサンプルが載っています。
さらに詳しいフィルター設定など、マイクロソフト純正のサンプルが載っています。