Shell-04 システムで定義されたフォルダのパスを取得する
Q Windowsフォルダ・Systemフォルダ・Tempフォルダの取得方法はわかりました。しかし、マイドキュメントフォルダなど、他のフォルダのパスを取得する方法も知りたいです。
A SHGetSpecialFolderLocation関数等を使います。
どう使う?
Declare Function SHGetSpecialFolderLocation Lib "shell32" _
(hwndOwner As HWND, nFolder As Long, ByRef ppidl As VoidPtr) As Long
Dim Buf As String,PIDL As VoidPtr
Buf=ZeroString(MAX_PATH)
SHGetSpecialFolderLocation(0,0,PIDL)
SHGetPathFromIDList(PIDL,Buf)
CoTaskMemFree(PIDL)
Buf=Left$(Buf,InStr(1,Buf,Chr$(0))-1)
'この時点で Bufにはデスクトップのパスが格納されているもっと簡単な方法もありますが、ここでは一番汎用的(使える環境が多い)であるSHGetSpecialFolderLocationを使う方法をご紹介しました。
この関数の第2引数を色々変えることによって、様々なパスを取得できます。
第2引数に指定する値は、こちらをご覧下さい(ちょくとさんの説明)。
但し、「意味」の最後に「(仮想フォルダ)」と書いてあるものは取得できません(デスクトップを除く)。
それから、「Version 4.71以降」等となっていたり、OS指定がされているものは、環境によっては取得できないためあまり使わない方がいいでしょう。
ついでに、「0x0000」とは「&H0000」のことですのでご注意を。