• ベストアンサー

VB6.0で、マルチセレクトダイアログボックス(API)を使うと、パス名にチルダが混ざってしまうのですが。

VB6.0で、APIのファイルを開くダイアログボックスで複数のファイルを開こうとしています。 下記のページで、openfilename構造体のFlagsにOFN_ALLOWMULTISELECTを指定したのですが、 パス名のところどころにチルダ「~」が混じってしまいます。 対処法をご存知ないでしょうか? ​http://www.red.oit-net.jp/tatsuya/vb/FileDialog.htm

  • ddtqp
  • お礼率68% (139/203)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

MSDNでflagsの説明をざっと眺めたら OFN_EXPLORER はデフォルトで設定されているが OFN_ALLOWMULTISELECT を設定した場合はクリアされるので OFN_EXPLORER を合わせて設定しろ と書いてある。 チルダが入るのは、ファイル名がショート名(8.3形式)になっているからでしょう。

ddtqp
質問者

お礼

旧ダイアログボックスが出ていたので、ショート名になっていたのですね。 OFN_EXPLORERをあわせてflagsに設定したら、エクスプローラーのダイアログボックスが表示され、パス名もばっちりでました。 ありがとうございます。助かりました!

関連するQ&A

  • VB6.0で、APIのダイアログボックスを使い複数のファイル名を取得したいのですが

    以下のサイトのファイルを開くコードを引用して、なんとかダイアログボックスをマルチセレクトにするところまではできました。 以下のコードを実行すると、strFileNameにファイルが入っているフォルダのパス名だけが取得されます。複数のファイル名を取得したいのですが。 どこを直せばいいのかわからず教えていただきたいのですが。 アドバイスお願いいたします。 "http://www.red.oit-net.jp/tatsuya/vb/FileDialog.htm" 以下、追加したコードです。---------------------------- Public Const OFN_LONGNAMES = &H200000 '旧スタイルのダイアログのとき、ロングファイル名を使用可能にする Public Const OFN_EXPLORER = &H80000 'エクスプローラ型ダイアログとして表示 '構造体の設定 With OFN .Flags = OFN_PATHMUSTEXIST Or _ OFN_FILEMUSTEXIST Or _ OFN_HIDEREADONLY Or _ OFN_ALLOWMULTISELECT Or OFN_EXPLORER 'マルチセレクト追加

  • VB6.0のマルチセレクトダイアログで250個のファイルを選択したいの

    VB6.0のマルチセレクトダイアログで250個のファイルを選択したいのですがエラーが出ます。 10個程度の選択ならエラーが出ません。 どこをどう修正したら多数のファイル選択が可能になるのでしょうか? どなたかわかる方教えてください。 どうぞよろしくお願いいたします。 エラー内容:下記のGetFileNameが空でファイル名を取得できない。 Dim GetFileName As Variant 'ファイル名(フルパス) GetFileName = apiGetOpenFileName(Form1.hWnd, strFilter, strDir) 'ダイアログ表示 使用したコード:下記リンク先のコードにマルチセレクト用のコードを追加しました。 "?http://www.red.oit-net.jp/tatsuya/vb/FileDialog.htm"? 以下、追加したコードです。---------------------------- Public Const OFN_LONGNAMES = &H200000 '旧スタイルのダイアログのとき、ロングファイル名を使用可能にする Public Const OFN_EXPLORER = &H80000 'エクスプローラ型ダイアログとして表示 '構造体の設定 With OFN .Flags = OFN_PATHMUSTEXIST Or _ OFN_FILEMUSTEXIST Or _ OFN_HIDEREADONLY Or _ OFN_ALLOWMULTISELECT Or OFN_EXPLORER 'マルチセレクト追加

  • ACEESSによるファイルを開くダイアログボックス操作

    掲題の圏ですが、以下のサイトを参照して作成しました。 http://www.red.oit-net.jp/tatsuya/vb/FileDialog.htm そうすると 関数 apiGetOpenFileName で .hInstance = App.hInstance でエラーが発生し 「オブジェクトが必要です」 というエラーが返されます。 この意味はあまりわかりません(VBの理解が浅いです)。 App.hInstance などないということですよね? まだ、検証不足なのですがここを .hInstance = 0 にしたところ、ダイアログボックスは表示されたのですが問題ないのでしょうか。 なぜなのでしょうか? 素人な質問で申し訳ありません。 APIを使ったことはほとんど無くて、ほとんど理解無くサンプルをコピペしているレベルです。

  • VB6.0で、ファイルのマルチセレクトダイアログでエラーがでます。

    VB6.0で、ファイルのマルチセレクトダイアログでエラーがでます。 ファイルを10個ほど選択ならエラーがでません。 250個ほどファイルを選択したいのですが、 コードを何度みなおしてもわかりません。 どなたか、どこをどう修正したらよいのかアドバイスをいただけませんでしょうか。 お手数をおかけしますがよろしくお願いします。 エラー箇所は下部の For i = 1 To UBound(GetFileName) です。 Public Function apiGetOpenFileName(nHandle As Long, nFilter As String, nDir As String) As Variant Dim OFN As OPENFILENAME 'OPENFILENAME構造体 Dim Ret As Long '戻り値 With OFN '構造体の設定 .Flags = OFN_PATHMUSTEXIST Or _ OFN_FILEMUSTEXIST Or _ OFN_HIDEREADONLY Or _ OFN_ALLOWMULTISELECT Or OFN_EXPLORER 'マルチセレクト追加 .hInstance = App.hInstance 'インスタンスハンドルを設定 .hwndOwner = nHandle 'ウインドウハンドルを設定 .lpstrTitle = "ファイルを開く" 'コモンダイアログのタイトルを設定 .lpstrFilter = nFilter 'フィルタを設定 .lStructSize = Len(OFN) '構造体のサイズを設定 .nMaxFile = 257 'ファイル名のバッファのサイズを設定 .lpstrFileTitle = String(257, Chr(0)) 'フルパス用のバッファを確保 .nMaxFileTitle = 257 'フルパス用のバッファのサイズを設定 .lpstrFile = String(257, Chr(0)) 'ファイル名のバッファを確保 .lpstrInitialDir = nDir 'デフォルトのディレクトリを指定 End With Ret = GetOpenFileName(OFN) '「ファイルを開く」ダイアログボックスを表示する If Ret = 0 Then '[キャンセル]を押した時 apiGetOpenFileName = vbNullString Exit Function Else '[OK]を押した時 apiGetOpenFileName = Split(OFN.lpstrFile, Chr(0)) End If End Function ' ファイル名を取得する ・・・コード省略 Dim GetFileName As Variant 'ファイル名(フルパス) GetFileName = apiGetOpenFileName(Form1.hWnd, strFilter, strDir) 'ダイアログ表示 'ファイル名取得 j = 1 For i = 1 To UBound(GetFileName) ←ここでエラーが出ます If GetFileName(i) <> "" Then strDFname(j) = GetFileName(i) j = j + 1 End If Next i

  • VB6.0で、APIのファイルを開くダイアログボックスを使い、複数のファイルを選択したいのですが。

    VB6.0で、APIのファイルを開くダイアログボックスを使い、複数のエクセルファイルを開きたいのですが、どなたかご存じないでしょうか?

  • bmpファイルビューアを作るため

    猫のサイトのコードを使って void OpenImgFiles(HWND hWnd) { OPENFILENAME ofn; memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFilter = "BMP files(*.bmp)\0*.bmp\0All Files(*.*)\0*.*\0\0"; ofn.lpstrFile = FileName; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_FILEMUSTEXIST; ofn.lpstrDefExt = "bmp"; ofn.nMaxFileTitle = 64; ofn.lpstrFileTitle = FileTitle; ofn.lpstrTitle = "ファイルを開く!"; if (GetOpenFileName(&ofn)) { show = 1; InvalidateRect(hWnd, NULL, TRUE); } return; } を呼び出してファイルを開くためのダイアログボックスを表示しようとしてのですが無応答で何も表示してくれません コンパイラは無償Borland C++5.5です 何が悪いか教えてください

  • Win32のファイルダイアログのサイズ変更のメッセージを受け取るには

    現在Win32 APIのGetOpenFileName/SetOpenFileNameを利用したファイルダイアログの作成をしているのですが、OPENFILENAME.FlagsにOFN_ENABLESIZING属性を、lpfnHookにイベントを取得する関数を設定した状態で、手動によるダイアログサイズの変更を行っても、WM_INITDIALOGやWM_NOTYFYイベントは受け取ることはできても、WM_SIZEイベントを受け取ることができません。 コモンダイアログのウィンドウサイズが変更されたことを知る方法はないでしょうか。

  • 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 ///////////////////////////////////////////////////////////////////////////////

  • ファイル名の取得について

    以下のサンプルで、選択したファイル名を任意の変数に取得したいのですが、どこに手を加えると取得できますでしょうか。 void OpenImgFiles(HWND hWnd) {   OPENFILENAME ofn;   memset(&ofn, 0, sizeof(OPENFILENAME));   ofn.lStructSize = sizeof(OPENFILENAME);   ofn.hwndOwner = hWnd;   ofn.lpstrFilter = "BMP files(*.bmp)\0*.bmp\0All Files(*.*)\0*.*\0\0";   ofn.lpstrFile = FileName;   ofn.nMaxFile = MAX_PATH;   ofn.Flags = OFN_FILEMUSTEXIST;   ofn.lpstrDefExt = "bmp";   ofn.nMaxFileTitle = 64;   ofn.lpstrFileTitle = FileTitle;   ofn.lpstrTitle = "ファイルを開く";   if (GetOpenFileName(&ofn)) {     show = 1;     InvalidateRect(hWnd, NULL, TRUE);   }   return; } ひょっとして簡単すぎるのかも知れませんが・・・ どうかよろしくお願いします。

  • Active Basic ファイルの複数選択

    AB 4.23.00を使っています。 ファイルの複数選択し、それぞれのファイルパスと名前をリストボックスに送信したいのですが、NULL文字の検索のやり方がわかりません。 すみませんが、どのようにすればよいのかをご教授ください。 コードは、 Dim ofn As OPENFILENAME Dim FilePath[MAX_PATH-1] As Byte 'ファイル名を取得 ofn.lStructSize=Len(ofn) ofn.hwndOwner=hMainWnd ofn.lpstrFilter=Ex"音楽 ファイル(wav;mp3;mid;midi)\0*.wav;*.mp3;*.mid;*.midi\0\0" ofn.nFilterIndex=0 ofn.lpstrFile=FilePath ofn.nMaxFile=MAX_PATH ofn.lpstrTitle="Soundファイルを開く" ofn.Flags=OFN_ALLOWMULTISELECT or OFN_HIDEREADONLY or OFN_LONGNAMES or OFN_EXPLORER If GetOpenFileName(ofn)=0 Then Exit Sub End If を使っています。 ここから、1つずつならファイル名とファイルパスは取得できるのですが、複数選択の場合のやり方がわかりません。 すみませんが、お願いします。

専門家に質問してみよう