■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#5833-1CommonDialogでフォルダ名の取得rem'1999-09-24(金) 14:38
     #5834-1RE#5833:CommonDialogでフォルダ名の取得匿名58341999-09-24(金) 14:46
     #5836-1RE#5834:CommonDialogでフォルダ名の取得rem'1999-09-24(金) 15:10
     #5836-2RE#5834:CommonDialogでフォルダ名の取得rem'1999-09-24(金) 15:10
     #5837-1RE#5833:CommonDialogでフォルダ名の取得MTS1999-09-24(金) 15:13
     #5839-1RE#5837:CommonDialogでフォルダ名の取得rem'1999-09-24(金) 15:38
     #5839-2RE#5837:CommonDialogでフォルダ名の取得rem'1999-09-24(金) 15:38
     #5841-1RE#5839:CommonDialogでフォルダ名の取得ぜんちゃん1999-09-24(金) 15:52
     #5843-1RE#5841:CommonDialogでフォルダ名の取得rem'1999-09-24(金) 16:19
     #5843-2RE#5841:CommonDialogでフォルダ名の取得rem'1999-09-24(金) 16:19
     #5847-1RE#5843:CommonDialogでフォルダ名の取得ぜんちゃん1999-09-24(金) 17:12
     #5859-1RE#5847:CommonDialogでフォルダ名の取得rem'1999-09-24(金) 18:30
     #5859-2RE#5847:CommonDialogでフォルダ名の取得rem'1999-09-24(金) 18:30
     #5866-1RE#5859:CommonDialogでフォルダ名の取得ぜんちゃん1999-09-24(金) 19:06
     #5872-1RE#5866:CommonDialogでフォルダ名の取得rem'1999-09-24(金) 19:23
     #5872-2RE#5866:CommonDialogでフォルダ名の取得rem'1999-09-24(金) 19:23
#5833-1
CommonDialogでフォルダ名の取得
CommonDialogコントロールでフォルダ名のみの取得はできないのでしょうか。
CommonDialog.showOpenで「ファイルを開く」で、フォルダのアイコンを選
択してダブルクリックするとそのフォルダが開いてしまいますし、「ファイル
の名前」にフォルダ名を入力して「開く」をクリックしても、やはりそのフォ
ルダが開いてしまいます。ヘルプを見てもらしきプロパティはないし、これっ
てどうやっても取得できないのでしょうか。

p.s:showOpen、showSaveなどで、フォントファイルのアイコンをダブルクリッ
クするとなぜかフォントビューア?が起動します。不思議です。
#5834-1
RE#5833:CommonDialogでフォルダ名の取得
> CommonDialogコントロールでフォルダ名のみの取得はできないのでしょうか。

フォルダの選択ダイアログを使うのが良いと思います。
#5836-1
RE#5834:CommonDialogでフォルダ名の取得
> フォルダの選択ダイアログを使うのが良いと思います。

すみません、フォルダの選択ダイアログってよくわからないんですが、
CommonDialogとは関係ないですよね。こちらの環境はWindowsNTと
VB5E+SP3なのですが、この環境で使用可能ですか。
#5836-2
RE#5834:CommonDialogでフォルダ名の取得
> フォルダの選択ダイアログを使うのが良いと思います。

すみません、フォルダの選択ダイアログってよくわからないんですが、
CommonDialogとは関係ないですよね。こちらの環境はWindowsNTと
VB5E+SP3なのですが、この環境で使用可能ですか。
#5837-1
RE#5833:CommonDialogでフォルダ名の取得
> CommonDialogコントロールでフォルダ名のみの取得はできないのでしょうか。

こういう方法でできますけど.....

    Dim sPath As String
    
    CommonDialog1.ShowOpen
    With CommonDialog1
        sPath = Mid(.filename, 1, Len(.filename) - Len(.FileTitle))
    End With
    Debug.Print sPath

#最近思うのですが、「できる?もしくはできない?」系の質問の場合
 大別して5つの結果に分かれると思います

 1)VBの命令(or関数)1つを使えばできる
 2)VBの命令(or関数)を組み合わせればできる < 今回はコレ
 3)API関数を使用すればできる
 4)既存ActiveX、DLLを利用すればできる
 5)できない!(苦笑)
 (その他、コントロール系の質問ではプロパティを変更すれば解決する場合多数)

1)の方法でできなかったから「できない!」と決めてしまうのはあまりにも安直と
思いますけど.....
#5839-1
RE#5837:CommonDialogでフォルダ名の取得
> こういう方法でできますけど.....
> 
>     Dim sPath As String
>     
>     CommonDialog1.ShowOpen
>     With CommonDialog1
>         sPath = Mid(.filename, 1, Len(.filename) - Len(.FileTitle))
>     End With
>     Debug.Print sPath

確かに選択したファイルのフォルダ名は取得できますが、その方法ではフォルダ名だけを
取得する場合、わざわざそのフォルダ以下のファイルを指定する必要がある(ファイルが
ない場合は取得できない)のでは?
それとも何かプロパティを変更すれば可能なのでしょうか。調べてみましたが、らしきプ
ロパティはありませんでしたが。
#5839-2
RE#5837:CommonDialogでフォルダ名の取得
> こういう方法でできますけど.....
> 
>     Dim sPath As String
>     
>     CommonDialog1.ShowOpen
>     With CommonDialog1
>         sPath = Mid(.filename, 1, Len(.filename) - Len(.FileTitle))
>     End With
>     Debug.Print sPath

確かに選択したファイルのフォルダ名は取得できますが、その方法ではフォルダ名だけを
取得する場合、わざわざそのフォルダ以下のファイルを指定する必要がある(ファイルが
ない場合は取得できない)のでは?
それとも何かプロパティを変更すれば可能なのでしょうか。調べてみましたが、らしきプ
ロパティはありませんでしたが。
#5841-1
RE#5839:CommonDialogでフォルダ名の取得
> 確かに選択したファイルのフォルダ名は取得できますが、その方法ではフォルダ名だけを
> 取得する場合、わざわざそのフォルダ以下のファイルを指定する必要がある(ファイルが
> ない場合は取得できない)のでは?
> それとも何かプロパティを変更すれば可能なのでしょうか。調べてみましたが、らしきプ
> ロパティはありませんでしたが。
> 

API関数を使用するという手もありますよ。
下の3つな関数を使用すればフォルダー選択のダイアログを表示できますが・・・

' フォルダ選択
Declare Function SHBrowseForFolder Lib "shell32.dll" (lpbi As BROWSEINFO) As Long
'ポインタからファイル名を取得する
Declare Function SHGetPathFromIDList Lib "shell32" _
(ByVal pidl As Long, ByVal pszPath As String) As Long
'メモリ解放
Declare Sub CoTaskMemFree Lib "ole32" (ByVal pv As Long)
#5843-1
RE#5841:CommonDialogでフォルダ名の取得
どうもありがとうございます。
SHBrowseForFolderなんて、名前からしてイけそうな感じですが、手持ちの
APIリファレンス(「Win32APIオフィシャルリファレンス」アスキー出版局)
にはその関数のリファレンスが載ってなく、MSDNも入っていないので、使用
方法などがよく分かりません。簡単な使用方法またはサンプルページなどを
教えていただけないでしょうか。
#5843-2
RE#5841:CommonDialogでフォルダ名の取得
どうもありがとうございます。
SHBrowseForFolderなんて、名前からしてイけそうな感じですが、手持ちの
APIリファレンス(「Win32APIオフィシャルリファレンス」アスキー出版局)
にはその関数のリファレンスが載ってなく、MSDNも入っていないので、使用
方法などがよく分かりません。簡単な使用方法またはサンプルページなどを
教えていただけないでしょうか。
#5847-1
RE#5843:CommonDialogでフォルダ名の取得
> どうもありがとうございます。
> SHBrowseForFolderなんて、名前からしてイけそうな感じですが、手持ちの
> APIリファレンス(「Win32APIオフィシャルリファレンス」アスキー出版局)
> にはその関数のリファレンスが載ってなく、MSDNも入っていないので、使用
> 方法などがよく分かりません。簡単な使用方法またはサンプルページなどを
> 教えていただけないでしょうか。
> 

私が実際に使用している関数です。

Function GetFolder(hWnd As Long, Title As String) As String
'hWnd - フォームのウィンドウハンドル
'Title - ダイアログのタイトル

    Dim BROWinfo As BROWSEINFO
    Dim RetFolder As Long
    Dim S_Buf As String

    With BROWinfo
        .hwndOwner = hWnd
        .ulFlags = BIF_RETURNONLYFSDIRS
        .lpszTitle = Title
        .pszDisplayName = String(MAX_PATH, 0)
        .pidlRoot = CSIDL_DESKTOP
        .lpfn = 0&
        .lParam = 0
    End With

    'ダイアログ表示
    RetFolder = SHBrowseForFolder(BROWinfo)
    
    If RetFolder >= 0 Then
        ' フォルダ名の獲得
        S_Buf = String(MAX_PATH, 0)
        SHGetPathFromIDList RetFolder, S_Buf

        ' メモリ解放
        CoTaskMemFree RetFolder

        ' 結果表示
        GetFolder = S_Buf
    Else
        GetFolder = ""
    End If

End Function

一応関係ありそうな定数の説明もしときますね。
'pidlRootの設定値
Public Const CSIDL_DESKTOP = &H0    '\仮想デスクトップ
Public Const CSIDL_CONTROLS = &H3   '\コントロールパネル
Public Const CSIDL_PRINTERS = &H4   '\プリンター
Public Const CSIDL_PERSONAL = &H5   '\My Doucutents
Public Const CSIDL_FAVORITES = &H6  '\お気に入り
Public Const CSIDL_STARTUP = &H7    '\スタートアップ
Public Const CSIDL_RECENT = &H8     '\最近使ったファイル
Public Const CSIDL_STARTMENU = &HB  '\スタートメニュー
Public Const CSIDL_DESKTOPDIRECTORY = &H10 'デスクトップフォルダ
Public Const CSIDL_DRIVES = &H11    'ドライブ
Public Const CSIDL_NETWORK = &H12 'ネットワーク

'ulFlagsの設定値
Public Const BIF_RETURNONLYFSDIRS = &H1  'コントロールパネルやプリンタ、ブリーフケースなどを選べない
Public Const BIF_DONTGOBELOWDOMAIN = &H2 'ネットワークコンピュータ内のリソースを表示しない
Public Const BIF_BROWSEINCLUDEFILES = &H4000 '全てのリソースを選択出来る

Public Const MAX_PATH = 255
#5859-1
RE#5847:CommonDialogでフォルダ名の取得
ぜんちゃんさん、本当にありがとうございます。
それで、何度も質問して申し訳ないんですが、SHBrowseForFolderの引数の
型、BROWSEINFOの型定義(Type)を教えていただけないでしょうか。

私の環境のAPIビューアやAPIリファレンスにはSHBrowseForFolderやBROWSEINFO
は載っていないので、自分で

Private Type	BROWSEINFO
	hwndOwner	As Long
	ulFlags		As Long
	lpszTitle	As String
	pszDisplayName	As String
	pidlRoot	As Long
	lpfn		As Long
	lParam		As Long
End Type

などとコードから拾った変数で定義して、教えていただいた関数を使ってみ
たのですが、それらしきウィンドゥが表示されたので(でもフォルダツリー
は表示されてない)、とりあえず「OK」をクリックしたところ、VBがいきな
り落ちてしまいました。←こういう無茶はやるもんじゃないですね。
#5859-2
RE#5847:CommonDialogでフォルダ名の取得
ぜんちゃんさん、本当にありがとうございます。
それで、何度も質問して申し訳ないんですが、SHBrowseForFolderの引数の
型、BROWSEINFOの型定義(Type)を教えていただけないでしょうか。

私の環境のAPIビューアやAPIリファレンスにはSHBrowseForFolderやBROWSEINFO
は載っていないので、自分で

Private Type	BROWSEINFO
	hwndOwner	As Long
	ulFlags		As Long
	lpszTitle	As String
	pszDisplayName	As String
	pidlRoot	As Long
	lpfn		As Long
	lParam		As Long
End Type

などとコードから拾った変数で定義して、教えていただいた関数を使ってみ
たのですが、それらしきウィンドゥが表示されたので(でもフォルダツリー
は表示されてない)、とりあえず「OK」をクリックしたところ、VBがいきな
り落ちてしまいました。←こういう無茶はやるもんじゃないですね。
#5866-1
RE#5859:CommonDialogでフォルダ名の取得
> ぜんちゃんさん、本当にありがとうございます。
> それで、何度も質問して申し訳ないんですが、SHBrowseForFolderの引数の
> 型、BROWSEINFOの型定義(Type)を教えていただけないでしょうか。

APIビューワに無かったんですね。
長い間当たり前のように使っていたので、てっきりあるものだと思ってました。

Type BROWSEINFO
    hwndOwner As Long     'ウィンドウハンドル
    pidlRoot As Long      'ルートフォルダのID
    pszDisplayName As String '選択したフォルダの表示名
    lpszTitle As String   '表示するメッセージ
    ulFlags As Integer    'フラグ
    lpfn As Long          
    lParam As Long        
    iImage As Integer     
End Type

それでは、がんばってね。
#5872-1
RE#5866:CommonDialogでフォルダ名の取得
自分定義のと入れ替えてみると、上手く行きました。
ぜんちゃんさん、何度もありがとうございました。
#5872-2
RE#5866:CommonDialogでフォルダ名の取得
自分定義のと入れ替えてみると、上手く行きました。
ぜんちゃんさん、何度もありがとうございました。
このページと関連する記事:
#7497-0フォルダを指定するダイアログボックス1999-10-16(土) 21:03
#20627-0コモンダイアログつかってMIDIを再生する場合2002-04-19(金) 07:47
#11710-0コピーアニメーションの表示について1999-12-15(水) 14:45
#577-2フォルダ選択ダイアログの表示2003-08-26(火) 19:13
#12369-0FDの状態1999-12-24(金) 18:05
#26611-0Environを使用してデスクトップのパスを取得できますか。2000-07-26(水) 19:17
#1639-1API SHFileOperation()に関して1999-07-19(月) 15:02
#44-0API SHFileOperation()について1999-07-16(金) 18:06
#29733-0ListViewでのフォルダ構成の取得2002-07-02(火) 09:44
#38987-0ネットワーク上におけるマシン名の取得について2001-02-16(金) 16:49
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)