秀丸マクロ ファイルを開くダイアログを実行する


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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エンコードをやったことのある人はピンときたかもしれませんが、次のような書式を想定しています。
キー=値,キー=値,...,キー=値
今回は、キーに指定された項目別に 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 命令の標準入出力サポートを信じて待つしかありません。

  • 参考
MicrosoftTechNet / Hey, Scripting Guy! - ファイルを選択するためのダイアログ ボックスを表示する方法はありますか
さらに詳しいフィルター設定など、マイクロソフト純正のサンプルが載っています。


|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|

ほーみんぐ★わんだー

- CONTENTS -




TIPS&自製ツール


その他



Wiki整理のお知らせ
はてなダイアリーを立てました。一部のコンテンツを引越すかもしれません。主に車関連を移設予定。