よろしくお願いします。
選択したファイルが1つの場合は「lpstrFile」にフルパスが格納
されているようですが、複数選択したそれぞれのファイルのフルパスは
下記のコードではうまくメッセージボックスでそれぞれ表示されません。
目的は表示そのものではなく、選択した複数のファイルを任意の場所に
読み書きしたいのですが、この段階でつまずいています。
'OPENFILENAME構造体の初期化
Dim ofn As OPENFILENAME
Dim FileName[MAX_PATH] As Byte,FN1[MAX_PATH] As Byte
FillMemory(VarPtr(ofn),Len(ofn),0)
ofn.lpstrInitialDir="D:"
ofn.lStructSize=Len(ofn)
ofn.hwndOwner=hMainWnd
ofn.lpstrFilter=Ex" 全てのデータ\0*.*\0\0"
ofn.nFilterIndex=1
ofn.lpstrFile=FileName
ofn.nMaxFile=MAX_PATH
ofn.lpstrTitle="ファイルの選択"
ofn.Flags=OFN_ALLOWMULTISELECT OR OFN_OVERWRITEPROMPT or OFN_EXPLORER or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
ofn.lpstrDefExt="*"
'「ファイルの選択」ダイアログ ボックスを表示
If GetOpenFileName(ofn)=0 Then Exit Sub
MessageBox(0,FileName,"",MB_OK)
ダイアログボックスの複数選択
Re: ダイアログボックスの複数選択
> 選択したファイルが1つの場合は「lpstrFile」にフルパスが格納
> されているようですが、複数選択したそれぞれのファイルのフルパスは
> 下記のコードではうまくメッセージボックスでそれぞれ表示されません。
OFN_EXPLORERフラグが設定されている場合、それぞれNULL文字で区切られ、連続したNULL文字で終わります。
ということです。
ということはファイル名(複数)は以下のような文字列になっているんじゃないでしょうか。
これをそれぞれ取り出すと。
さてどうやって取り出したものか...。
GetLogicalDriveStrings()という関数で取得できるドライブ名の文字列も前掲した通りで、昔はそれをちゃんと取り出してたんですけど、やり方忘れてしまいました...。
> されているようですが、複数選択したそれぞれのファイルのフルパスは
> 下記のコードではうまくメッセージボックスでそれぞれ表示されません。
OFN_EXPLORERフラグが設定されている場合、それぞれNULL文字で区切られ、連続したNULL文字で終わります。
ということです。
ということはファイル名(複数)は以下のような文字列になっているんじゃないでしょうか。
コード: 全て選択
"C:\hoge\hoge.exe\0C:\pika\pika.exe\0E:\foo\foo.exe\0\0"
さてどうやって取り出したものか...。
GetLogicalDriveStrings()という関数で取得できるドライブ名の文字列も前掲した通りで、昔はそれをちゃんと取り出してたんですけど、やり方忘れてしまいました...。
Re: ダイアログボックスの複数選択
こういう感じで取り出してみてはいかがでしょう。(FileNameに複数のファイル名が入っているとする)
コード: 全て選択
Dim p As *Byte
p=FileName
While p[0]<>0
'ここでpはファイル名の1つを示す。
MessageBox(0,p,"",MB_OK) '例
'次のファイル名
p=p+lstrlen(p)+1
Wend
[hira]
http://hira.hopto.org/
http://hira.hopto.org/