ホーム > カテゴリ > Visual Basic >

各種特殊ファルダの位置を取得する

各種特殊ファルダの位置を取得するサンプルです。

サンプルの実行画面

ソースコード

[SpecialFolder.frm]

'SHGetSpecialFolderLocation=>特殊フォルダの位置を取得する

'<引数>
'hWndOwner:ウインドウのハンドル
'nFolder:定数(CSIDL_××参照)
'ppidl:IDが入る変数

'<戻り値>
'正常終了0

Private Declare Function SHGetSpecialFolderLocation Lib "SHELL32" (ByVal hWndOwner As Long, ByVal nFolder As Long, ppidl As Long) As Long


'SHGetPathFromIDList=>特殊フォルダのIDをパスに変換する

'<引数>
'pIDL :特殊フォルダのID
'pszPath:パス名を格納するバッファ

'<戻り値>
'正常終了0

Private Declare Function SHGetPathFromIDList Lib "SHELL32" (ByVal pIDL As Long, ByVal pszPath As String) As Long


Const CSIDL_DESKTOP = &H0           '[デスクトップ]
Const CSIDL_PROGRAMS = &H2          '[プログラム]
Const CSIDL_CONTROLS = &H3          '[コントロールパネル]
Const CSIDL_PRINTERS = &H4          '[プリンター]
Const CSIDL_PERSONAL = &H5          '[My Documents]
Const CSIDL_FAVORITES = &H6         '[お気に入り]
Const CSIDL_STARTUP = &H7           '[スタートアップ]
Const CSIDL_RECENT = &H8            '[Recent]
Const CSIDL_SENDTO = &H9            '[SendTo]
Const CSIDL_BITBUCKET = &HA         '[ごみ箱]
Const CSIDL_STARTMENU = &HB         '[スタートメニュー]
Const CSIDL_DESKTOPDIRECTORY = &H10 '[デスクトップ(フォルダ)]
Const CSIDL_DRIVES = &H11           '[マイコンピュータ]
Const CSIDL_NETWORK = &H12          '[ネットワークコンピュータ]
Const CSIDL_NETHOO = &H13           '[NetHood]
Const CSIDL_FONTS = &H14            '[Fonts]
Const CSIDL_TEMPLATES = &H15        '[ShellNew]



Private Sub Command1_Click()

 List1.Clear
  
 Call List(CSIDL_DESKTOP, "[デスクトップ]", True)
 Call List(CSIDL_PROGRAMS, "[プログラム]", True)
 Call List(CSIDL_PERSONAL, "[My Documents]", True)
 Call List(CSIDL_FAVORITES, "[お気に入り]", True)
 Call List(CSIDL_STARTMENU, "[スタートメニュー]", True)
 Call List(CSIDL_TEMPLATES, "[ShellNew]", True)
 Call List(CSIDL_RECENT, "[Recent]", False)
 Call List(CSIDL_SENDTO, "[SentTo]", False)
 Call List(CSIDL_NETHOO, "[NetHood]", False)
 Call List(CSIDL_FONTS, "[Fonts]", False)

 
End Sub


'------------------------------------------------------------------------
'■関数系 List
'■用途  特殊フォルダのパを取得する
'■引数
'   Folder    取得したいフォルダ(定数CSIDL_××参照)
'   FolderName  フォルダ名--->自分がやりやすいようにしているだけです。
'   dwFlag       ListBoxの見栄えの問題なのであまり気にしないで下さい。
'------------------------------------------------------------------------

Private Sub List(Folder As Long, FolderName As String, dwFlag As Boolean)

Dim Ret As Long       '戻り値
Dim ID  As Long       'フォルダのID
Dim Path As String    '取得したパス名を格納する変数


'特殊フォルダの位置(ID)を取得する
Ret = SHGetSpecialFolderLocation(ByVal Me.hWnd, ByVal Folder, ID)

'バッファを確保
Path = String(256, Chr(0))

'IDからパス名へ変換する
Ret = SHGetPathFromIDList(ID, Path)


If dwFlag = True Then    '<---(見栄えの問題なのでなくても良い)

  'リストに追加
    If Path <> vbNullString Then List1.AddItem FolderName & vbTab & Path
 

Else                     '← & ↓(見栄えの問題なのでなくても良い))

 'リストに追加
    If Path <> vbNullString Then List1.AddItem FolderName & vbTab & vbTab & Path
 
End If                   '<---(見栄えの問題なのでなくても良い)
 
End Sub

ソースコード一式のダウンロード

vbapi_specialfolder.zip 1.71 KB (1,760 バイト)

このサンプルの動作環境について

このサンプルは 「Windows98」及び「Microsoft Visual Basic 5.0 Professional Edition」で確認しております。環境が異なる場合は正常に動作しない場合もございますのでご了承下さい。





関連記事



公開日:2015年03月05日
記事NO:00393