UWSCでファイルダイアログからフルパスを取得したい(APIコード有り)
UWSCでダイアログを表示し、ユーザーにファイルを選択させ、Excelファイルをオープンしたいと思っています。ファイルダイアログのソースはネットで見つけました。
しかし、APIの知識はまったく無いので下記コードの意味がわかりません。
最終的にやりたいことは、戻値 = XLOPEN( [ファイル名] )
関数を利用して、「ファイル名」の所にユーザーが選択したファイルのフルパスを入力したいです。
下記のAPIのコードを使ってどのようにフルパスを取得することができますでしょうか?
よろしくお願いいたします。
///////////////////////////////////////////////////////////////////////////////
v_Path = FileOpenDLG.Get(v_Path)
Module FileOpenDLG
DEF_DLL GetOpenFileNameA({Long, Long, Long, var string, var string, Long, Long _
, var pchar, Long, var pchar, Long, var string, var string _
, Long, DWORD, var string, Long, Long, var string}): Bool: COMDLG32
CONST STRUCT_SIZE = 76 // 構造体のサイズ
CONST OFN_HIDEREADONLY = $4 // 書き込み禁止(Read Only)のチェックボックスを非表示。
CONST OFN_FILEMUSTEXIST = $1000 // 存在しないファイルを選択できないようにする。
CONST OFN_EXPLORER = $80000 // ダイアログボックスをエクスプローラ風にする。
Dim Flag = OFN_HIDEREADONLY or OFN_FILEMUSTEXIST or OFN_EXPLORER
Dim Len_1024 = $400
Dim Buff_1024 = Format(ChrB(0), This.Len_1024)
Dim Name
Dim Title = "Excelファイルを選択。"
Dim ExtFilter = "Excel (*.xls)" + ChrB(0) + "*.xls" + ChrB(0) _
+ "全て (*.*)" + ChrB(0) + "*"
Dim DefaultDir = null // 初期表示ディレクトリ null は CurrentDirectory。
Function Get(var v_Path)
v_Path = This.Buff_1024
This.Name = This.Buff_1024
Result = GetOpenFileNameA(_
STRUCT_SIZE, 0, 0, This.ExtFilter + ChrB(0), NULL, 0, 0 _
, v_Path, This.Len_1024, This.Name, This.Len_1024, This.DefaultDir, This.Title _
, This.Flag, 0, NULL, 0, 0, NULL)
FEnd
EndModule
///////////////////////////////////////////////////////////////////////////////
お礼
旧ダイアログボックスが出ていたので、ショート名になっていたのですね。 OFN_EXPLORERをあわせてflagsに設定したら、エクスプローラーのダイアログボックスが表示され、パス名もばっちりでました。 ありがとうございます。助かりました!