ダイアログボックスの複数選択

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ダイアログボックスの複数選択

Re: ダイアログボックスの複数選択

by hira » 2006年10月23日(月) 20:24

こういう感じで取り出してみてはいかがでしょう。(FileNameに複数のファイル名が入っているとする)

コード: 全て選択

Dim p As *Byte
p=FileName
While p[0]<>0
	'ここでpはファイル名の1つを示す。
	MessageBox(0,p,"",MB_OK) '例

	'次のファイル名
	p=p+lstrlen(p)+1
Wend

Re: ダイアログボックスの複数選択

by 7 » 2006年10月23日(月) 18:47

> 選択したファイルが1つの場合は「lpstrFile」にフルパスが格納
> されているようですが、複数選択したそれぞれのファイルのフルパスは
> 下記のコードではうまくメッセージボックスでそれぞれ表示されません。
OFN_EXPLORERフラグが設定されている場合、それぞれNULL文字で区切られ、連続したNULL文字で終わります。
ということです。
ということはファイル名(複数)は以下のような文字列になっているんじゃないでしょうか。

コード: 全て選択

"C:\hoge\hoge.exe\0C:\pika\pika.exe\0E:\foo\foo.exe\0\0"
これをそれぞれ取り出すと。

さてどうやって取り出したものか...。

GetLogicalDriveStrings()という関数で取得できるドライブ名の文字列も前掲した通りで、昔はそれをちゃんと取り出してたんですけど、やり方忘れてしまいました...。

ダイアログボックスの複数選択

by ジョン » 2006年10月23日(月) 11:08

よろしくお願いします。
選択したファイルが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)

ページトップ