■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#361-0デスクトップ以下のファイル情報の取得方法匿名3612002-03-15(金) 08:16
     #364-0RE#361:デスクトップ以下のファイル情報の取得方法ゆう(U)2002-03-15(金) 09:33
     #365-0RE#364:デスクトップ以下のファイル情報の取得方法匿名3652002-03-15(金) 10:07
     #366-0RE#365:デスクトップ以下のファイル情報の取得方法ゆう(U)2002-03-15(金) 11:09
     #367-0RE#366:デスクトップ以下のファイル情報の取得方法匿名3672002-03-15(金) 14:36
     #368-0RE#367:デスクトップ以下のファイル情報の取得方法魔界の仮面弁士2002-03-15(金) 16:12
     #378-1RE#368:デスクトップ以下のファイル情報の取得方法匿名3782002-03-18(月) 15:48
     #393-1RE#378:デスクトップ以下のファイル情報の取得方法あらら2002-03-19(火) 12:04
     #417-1RE#393:デスクトップ以下のファイル情報の取得方法匿名4172002-03-20(水) 09:59
     #419-1RE#417:デスクトップ以下のファイル情報の取得方法あらら2002-03-20(水) 10:49
     #420-0RE#419:デスクトップ以下のファイル情報の取得方法匿名4202002-03-20(水) 11:41
     #424-1RE#420:デスクトップ以下のファイル情報の取得方法あらら2002-03-20(水) 13:30
     #426-0RE#424:デスクトップ以下のファイル情報の取得方法匿名4262002-03-20(水) 14:20
     #431-0RE#426:デスクトップ以下のファイル情報の取得方法ゆう(U)2002-03-20(水) 15:33
     #434-0RE#426:デスクトップ以下のファイル情報の取得方法あらら2002-03-20(水) 15:50
     #437-0RE#434:デスクトップ以下のファイル情報の取得方法匿名426 2002-03-20(水) 16:12
     #438-0RE#437:デスクトップ以下のファイル情報の取得方法あらら2002-03-20(水) 17:05
#361-0
デスクトップ以下のファイル情報の取得方法
ドライブ(C:\,D:\,E:\,F:\)のファイル情報(名前,サイズ,種類,ファイルの最終更新日時)は
FileSystemObjectのFilesプロパティで取得することができます。
が、「デスクトップ\マイコンピュータ\マイドキュメント」等のドライブがない場合のファイル情報を
取得するにはどうすればよいのでしょうか?。
#364-0
RE#361:デスクトップ以下のファイル情報の取得方法
> が、「デスクトップ\マイコンピュータ\マイドキュメント」等のドライブがない場合のファイル情報を
> 取得するにはどうすればよいのでしょうか?。
「エクスプローラ左窓の様なフォルダツリー(再投稿)の動作について」
「サンプルコード#142の動作について」
の元ネタが参考になります。

サンプル)
Private Sub Command1_Click()
Const ssfDESKTOP = 0
  Dim myShell As Object
  Dim myFolderItems2 As Object
  Dim myFolderItem As Object

  Set myShell = CreateObject("Shell.Application")
  Set myFolderItems2 = myShell.NameSpace(ssfDESKTOP).Items
  For Each myFolderItem In myFolderItems2
    Debug.Print myFolderItem.IsFileSystem,
    Debug.Print myFolderItem.IsFolder,
    Debug.Print myFolderItem.Name,
    Debug.Print myFolderItem.Path
  Next myFolderItem

  Set myFolderItems2 = Nothing
  Set myShell = Nothing
End Sub
#365-0
RE#364:デスクトップ以下のファイル情報の取得方法
大変参考になりました。ありがとうございました。

例えば「Node.FullPath」でフルパスを取得します。
「デスクトップ\マイコンピュータ\マイドキュメント」等のドライブがない場合、
「マイコンピュータ\(C:\)\Windows」等のドライブがある場合

 何で判断させて「CreateObject("Shell.Application")」と「FileSystemObject(Files)」を
 使いわければいいのですか?。 

例えば。。。ssfDESKTOP=関数(Node.FullPath)みたいな関数とかがあれば

> サンプル)
> Private Sub Command1_Click()
> Const ssfDESKTOP = 0
>   Dim myShell As Object
>   Dim myFolderItems2 As Object
>   Dim myFolderItem As Object
> 
>   Set myShell = CreateObject("Shell.Application")
>   Set myFolderItems2 = myShell.NameSpace(ssfDESKTOP).Items
>   For Each myFolderItem In myFolderItems2
>     Debug.Print myFolderItem.IsFileSystem,
>     Debug.Print myFolderItem.IsFolder,
>     Debug.Print myFolderItem.Name,
>     Debug.Print myFolderItem.Path
>   Next myFolderItem
> 
>   Set myFolderItems2 = Nothing
>   Set myShell = Nothing
> End Sub
#366-0
RE#365:デスクトップ以下のファイル情報の取得方法
> 例えば「Node.FullPath」でフルパスを取得します。
> 「デスクトップ\マイコンピュータ\マイドキュメント」等のドライブがない場合、
> 「マイコンピュータ\(C:\)\Windows」等のドライブがある場合
> 
>  何で判断させて「CreateObject("Shell.Application")」と「FileSystemObject(Files)」を
>  使いわければいいのですか?。 
> 
> 例えば。。。ssfDESKTOP=関数(Node.FullPath)みたいな関数とかがあれば
貴方は誰ですか?

「エクスプローラ左窓の様なフォルダツリー(再投稿)の動作について」
「サンプルコード#142の動作について」
の一連の投稿をされている方と同じでしょうか?

CreateObject("Shell.Application")が何を参照設定して、何のオブジェクト
を意味するかは先の元ネタ(「こんなことできます」掲示板)を読むとわかります。

で実際には「FileSystemObject オブジェクト」を使用せずとも可能です。


詳しい事はヘルプ(MSDN)で「Shell Objects」を読んでみて下さい。


このオブジェクトの事が理解出来てきたら、先のサンプルでDebug.Printを
4つ書いてある意味を考えてみてください。
#367-0
RE#366:デスクトップ以下のファイル情報の取得方法
以下の様にすることによりドライブの場合も取得することができました。
ただ。。。
1.ドライブを直接「myShell.NameSpace("d:\")」指定しないとエラーが発生してしまう。
  変数に文字を代入して取得はできないのでしょうか?。

2.特殊フォルダは「myShell.NameSpace("デスクトップ")」と指定するとエラーが発生してしまう。
  以下の定数以外での取得はできないのでしょうか?。

    Const ssfDESKTOP = 0            ' デスクトップ(仮想)
    Const ssfINTERNETEXPLORER = 1   ' Internet Explorer
    Const ssfPROGRAMS = 2           ' プログラム
    Const ssfCONTROLS = 3           ' コントロールパネル
    Const ssfPRINTERS = 4           ' プリンタ
    Const ssfPERSONAL = 5           ' マイドキュメント
    Const ssfFAVORITES = 6          ' お気に入り
    Const ssfSTARTUP = 7            ' スタートアップ
    Const ssfRECENT = 8             ' 最近使ったファイル
    Const ssfSENDTO = 9             ' 送る
    Const ssfBITBUCKET = 10         ' ごみ箱
    Const ssfSTARTMENU = 11         ' スタートメニュー
    Const ssfDESKTOPDIRECTORY = 16  ' デスクトップ(フォルダ)
    Const ssfDRIVES = 17            ' マイコンピュータ
    Const ssfNETWORK = 18           ' ネットワークコンピュータ
    Const ssfNETHOOD = 19           ' NetHood
    Const ssfFONTS = 20             ' フォント
    Const ssfTEMPLATES = 21         ' テンプレート
----------------------------------------------------------------------------------------

    Set myShell = CreateObject("Shell.Application")
    Set myFolderItems2 = myShell.NameSpace("d:\")
    
    For Each myFolderItem In myFolderItems2.Items
    
      Debug.Print myFolderItem.IsFileSystem,
      Debug.Print myFolderItem.IsFolder,
      Debug.Print myFolderItem.Name,
      Debug.Print myFolderItem.Type,
      Debug.Print myFolderItem.ModifyDate,
      Debug.Print myFolderItem.Path
    
    Next myFolderItem
    
    Set myFolderItems2 = Nothing
    Set myShell = Nothing
#368-0
RE#367:デスクトップ以下のファイル情報の取得方法
> 1.ドライブを直接「myShell.NameSpace("d:\")」指定しないとエラーが発生してしまう。
>   変数に文字を代入して取得はできないのでしょうか?。

できますが、指定するのは「Variantデータ型」である必要があります。

もし、String型の変数を使っているなら、Variant型の変数に変更するか、
「myShell.NameSpace((Path))」のように括弧を付けて「式」扱いにしてください。

# Shellオブジェクトは、Windows Script(VBScriptやJScriptなど)からの呼び出しを
# 考慮して設計されているため、ほとんどの引数をVariant型で扱うようになっています。


> 2.特殊フォルダは「myShell.NameSpace("デスクトップ")」と指定するとエラーが発生してしまう。
>   以下の定数以外での取得はできないのでしょうか?。

必ず、フルパス文字列で指定するようにしてください。

ただし、物理ディレクトリではないフォルダ(コントロールパネルフォルダなどの論理フォルダ)を
開く場合には、パスが使えないので、かわりにShellSpecialFolderConstants 定数を使います、

あるいは、CLSIDが分かっているのであれば、
  myShell.NameSpace("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")
のようにする事もできます。
# 上記は、「マイコンピュータ」フォルダを表します。


>     Const ssfDESKTOP = 0            ' デスクトップ(仮想)
>        :
>     Const ssfTEMPLATES = 21         ' テンプレート
こちらを参照してみてください。
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/objects/shell/shellspecialfolderconstants.asp
#378-1
RE#368:デスクトップ以下のファイル情報の取得方法
> > 1.ドライブを直接「myShell.NameSpace("d:\")」指定しないとエラーが発生してしまう。
> >   変数に文字を代入して取得はできないのでしょうか?。
> 
> できますが、指定するのは「Variantデータ型」である必要があります。
> 
> もし、String型の変数を使っているなら、Variant型の変数に変更するか、
> 「myShell.NameSpace((Path))」のように括弧を付けて「式」扱いにしてください。

   Variant変数にしたら取得することができました。

     
 質問1.今、TreeViewのFullPathプロパティで「マイコンピュータ\コントロールパネル」等の情報は
      取得できています。API関数かなにかで「マイコンピュータ\コントロールパネル」を引数で
      渡したりしてあげてssfCONTROLS = 3が返ってくるような便利な関数は無いのでしょうか。。。
     やっぱり文字列から「ssfCONTROLS = 3」という定数を返すファンクションを作らないと
     だめなんですかね?。。。

 質問2.FileSystemObjectですとドライブの準備ができているかどうかを確認するプロパティ(IsReady)
     が用意されていましたが、Shell.Applicationでは無いのでしょうか?。



 知っている方がいらっしゃいましたら教えていただけないでしょうか?。 

     
#393-1
RE#378:デスクトップ以下のファイル情報の取得方法
回答がないようなので。

>      
>  質問1.今、TreeViewのFullPathプロパティで「マイコンピュータ\コントロールパネル」等の情報は
>       取得できています。API関数かなにかで「マイコンピュータ\コントロールパネル」を引数で
>       渡したりしてあげてssfCONTROLS = 3が返ってくるような便利な関数は無いのでしょうか。。。
>      やっぱり文字列から「ssfCONTROLS = 3」という定数を返すファンクションを作らないと
>      だめなんですかね?。。。
> 
ShellSpecialFolderConstantsは、shell32.dll内で列挙している定数で
shellオブジェクト内で定義されている関数でしか使えません。

>  質問2.FileSystemObjectですとドライブの準備ができているかどうかを確認するプロパティ(IsReady)
>      が用意されていましたが、Shell.Applicationでは無いのでしょうか?。
> 
オブジェクトブラウザでみる限りなさそうですね。

なぜ質問1.のような関数を必要としているのかがわかりません。

> TreeViewコントロールVer.5の場合、NodeオブジェクトのTagプロパティが
> Property Setに対応していません。そのため、Setステートメントを併用すると、
> > で「オブジェクトが必要です(実行時エラー424)」エラーが発生します。
> というエラーが発生します。
だからですか?

#関連する内容を質問する時は、HNつけたほうが
#統一した回答が得られ問題解決が早くなると思うんですが。
#417-1
RE#393:デスクトップ以下のファイル情報の取得方法
> 回答がないようなので。
> 
> >      
> >  質問1.今、TreeViewのFullPathプロパティで「マイコンピュータ\コントロールパネル」等の情報は
> >       取得できています。API関数かなにかで「マイコンピュータ\コントロールパネル」を引数で
> >       渡したりしてあげてssfCONTROLS = 3が返ってくるような便利な関数は無いのでしょうか。。。
> >      やっぱり文字列から「ssfCONTROLS = 3」という定数を返すファンクションを作らないと
> >      だめなんですかね?。。。
> > 
> なぜ質問1.のような関数を必要としているのかがわかりません。
> 

Set objshell = CreateObject("Shell.Application")
Set flditem = objshell.NameSpace(varPath)

このvarPathに「c:\」や「ssfCONTROLS」を渡してあげて情報(名前、サイズ、種類、更新日)を
取得したかったのです。
#419-1
RE#417:デスクトップ以下のファイル情報の取得方法
> > >  質問1.今、TreeViewのFullPathプロパティで「マイコンピュータ\コントロールパネル」等の情報は
> 
> Set objshell = CreateObject("Shell.Application")
> Set flditem = objshell.NameSpace(varPath)
> 
> このvarPathに「c:\」や「ssfCONTROLS」を渡してあげて情報(名前、サイズ、種類、更新日)を
> 取得したかったのです。

マイコンピュータやコントロールパネルという名称は、
objshell.NameSpaceで収得したものですよね。
そのとき名称といっしょにPathもゲットしておけば、解決するかもしれませんよ。
この場合、
  varPath = flditem.Self.Path
PathはString型です。
#420-0
RE#419:デスクトップ以下のファイル情報の取得方法
> > Set objshell = CreateObject("Shell.Application")
> > Set flditem = objshell.NameSpace(varPath)

> マイコンピュータやコントロールパネルという名称は、
> objshell.NameSpaceで収得したものですよね。
> そのとき名称といっしょにPathもゲットしておけば、解決するかもしれませんよ。
> この場合、
>   varPath = flditem.Self.Path
> PathはString型です。

Set objshell = CreateObject("Shell.Application")
Set flditem = objshell.NameSpace(varPath)

最初にvarPathの内容を取得してあげないと「名前、サイズ、更新日時、パス」も取得できないと思うの
ですが。。。
#424-1
RE#420:デスクトップ以下のファイル情報の取得方法
> 
> Set objshell = CreateObject("Shell.Application")
> Set flditem = objshell.NameSpace(varPath)
> 
> 最初にvarPathの内容を取得してあげないと「名前、サイズ、更新日時、パス」も取得できないと思うの
> ですが。。。

その通りですが、最初の一回だけです。
フォルダツリーを作ろうとしているのであれば、デスクトップの情報さえ収得できれば
あとはたどっていくだけですべてのフォルダを列挙することはできます。

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.NameSpace(ssfDESKTOP)       ' get desktop folder object
    For Each objFolderItems In objFolder .Items        ' get it is FolderItems
        If objFolderItems.IsFolder Then
        Debug.Print objFolderItems.Path
        Debug.Print objFolderItems.Name
        End If
    Next

こんな感じで、デスクトップ下のフォルダは列挙できます。
2回目以降は objFolderItems.Path を使えば、
  Set objFolder = objShell.NameSpace(objFolderItems.Path)
TreeViewのKeyに objFolderItems.Path (String型)を
入れておくってのもてです。
#426-0
RE#424:デスクトップ以下のファイル情報の取得方法
#368参照しますと。。。取得できなそうだったので何か良い手はないかと思い投稿しました。
「objFolderItems.Path」は文字列だと思うので「objShell.NameSpace」では指定できないのでは?。
> > 
> > Set objshell = CreateObject("Shell.Application")
> > Set flditem = objshell.NameSpace(varPath)
> > 
> > 最初にvarPathの内容を取得してあげないと「名前、サイズ、更新日時、パス」も取得できないと思うの
> > ですが。。。
> 
> その通りですが、最初の一回だけです。
> フォルダツリーを作ろうとしているのであれば、デスクトップの情報さえ収得できれば
> あとはたどっていくだけですべてのフォルダを列挙することはできます。
> 
>     Set objShell = CreateObject("Shell.Application")
>     Set objFolder = objShell.NameSpace(ssfDESKTOP)       ' get desktop folder object
>     For Each objFolderItems In objFolder .Items        ' get it is FolderItems
>         If objFolderItems.IsFolder Then
>         Debug.Print objFolderItems.Path
>         Debug.Print objFolderItems.Name
>         End If
>     Next
> 
> こんな感じで、デスクトップ下のフォルダは列挙できます。
> 2回目以降は objFolderItems.Path を使えば、
>   Set objFolder = objShell.NameSpace(objFolderItems.Path)
> TreeViewのKeyに objFolderItems.Path (String型)を
> 入れておくってのもてです。
#431-0
RE#426:デスクトップ以下のファイル情報の取得方法
貴方は誰ですか?

毎回匿名しかも新規の匿名番号という事なので・・・
途中参入なのか元投稿者なのかはっきりしません。
※途中参入・便乗投稿が悪いわけではありません

●希望としては、一連の質問・回答の間は同じ
 ハンドル(匿名なら初回の匿名番号)で・・・


最初から全てを読めば何が出来て何が出来ないか
わかるはずです。

途中参入(質問)なら、今までの状況を読んでおくべき
では無いでしょうか?

> #368参照しますと。。。取得できなそうだったので何か良い手はないかと思い投稿しました。
> 「objFolderItems.Path」は文字列だと思うので「objShell.NameSpace」では指定できないのでは?。
単に文字列型変数は指定できないから・・・という問題なら
既にその回答は弁士さんがされています。

ログは有効に利用しては?

#434-0
RE#426:デスクトップ以下のファイル情報の取得方法
> #368参照しますと。。。取得できなそうだったので何か良い手はないかと思い投稿しました。
> 「objFolderItems.Path」は文字列だと思うので「objShell.NameSpace」では指定できないのでは?。

objFolderItems.Path はString型ですが、Variant型変数に代入すればVariant型になります。
Variant型は基本的なデータ型、何でも代入できる特別な型です。
中身はString型でも、VBからはVariant型です。
#437-0
RE#434:デスクトップ以下のファイル情報の取得方法
> > #368参照しますと。。。取得できなそうだったので何か良い手はないかと思い投稿しました。
> > 「objFolderItems.Path」は文字列だと思うので「objShell.NameSpace」では指定できないのでは?。
> 
> objFolderItems.Path はString型ですが、Variant型変数に代入すればVariant型になります。
> Variant型は基本的なデータ型、何でも代入できる特別な型です。
> 中身はString型でも、VBからはVariant型です。
  あっ、そうでした。そうでした。
 あと、2回目以降というのは。。。
 例えば1回目に”マイコンピュータ”内のフォルダツリーを表示させますよね?。
 それで、次に”コントロールパネル”がクリックされました。->これが2回目ということですか?。
#438-0
RE#437:デスクトップ以下のファイル情報の取得方法
この手の質問が重複しており、一貫した回答を得るためにも名前を付けましょう。

>  例えば1回目に”マイコンピュータ”内のフォルダツリーを表示させますよね?。
>  それで、次に”コントロールパネル”がクリックされました。->これが2回目ということですか?。

1回目は、"デスクトップ"のフォルダオブジェクトを収得するときで、
2回目とは、"デスクトップ"のフォルダオブジェクトを収得した後すべてです。

"デスクトップ"のフォルダオブジェクトを収得してしまえば、
そこから下は、
  For Each objFolderItems In objFolder .Items
のように列挙してしまえば、ssfDESKTOP を使う必要はないわけです。

本来はTreeViewのFullPathでもいいんですが、エクスプローラ風となると、
"マイコンピュータ"のようなファイル操作で指定できないパスになってしまうので、
TreeViewの各NodeのTagやKeyにオブジェクトやPathを入れておきます。
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)