特殊フォルダパスの取得(T)          <TOP>


特殊なフォルダパスを取得します。

SHGetFolderPath CSIDLからパスを取得

 

WindowsXP

Windows98

Windows2000

Windows 7

参照

<特殊フォルダパスの取得(U)>

<Window・Systemフォルダ取得>

 

'================================================================
'= 特殊フォルダのパス名等の取得
'=    (SHGetFolderPath.bas)
'================================================================
#include "Windows.bi"

' CSIDLからパスを取得する関数の宣言
Declare Function Api_SHGetFolderPath& Lib "ShFolder" Alias "SHGetFolderPathA" (ByVal hwndOwner&, ByVal nFolder&, ByVal hToken&, ByVal dwFlags&, ByVal pszPath$)

' 取り出すパスの種類を指定する定数
#define SHGFP_TYPE_CURRENT 0            '取り出すパスの種類を指定する定数
#define SHGFP_TYPE_DEFAULT 1            '取り出すパスの種類を指定する定数

' CSIDLを示す定数の宣言
#define CSIDL_INTERNET &H1              'InternetExplorer(仮想フォルダ)
#define CSIDL_PROGRAMS &H2              'プログラム(ファイルシステムディレクトリ)
#define CSIDL_CONTROLS &H3              'コントロールパネル(仮想フォルダ)
#define CSIDL_PRINTERS &H4              'プリンタ(仮想フォルダ)
#define CSIDL_PERSONAL &H5              'マイドキュメント(ファイルシステムディレクトリ)
#define CSIDL_FAVORITES &H6             'お気に入り(ファイルシステムディレクトリ)
#define CSIDL_STARTUP &H7               'スタートアップ(ファイルシステムディレクトリ)
#define CSIDL_RECENT &H8                '最近使ったファイル(ファイルシステムディレクトリ)
#define CSIDL_SENDTO &H9                'SEndTo(ファイルシステムディレクトリ)
#define CSIDL_BITBUCKET &HA             'ゴミ箱(仮想フォルダ)
#define CSIDL_STARTMENU &HB             'スタートメニュー(ファイルシステムディレクトリ)
#define CSIDL_MYMUSIC &HD               'マイミュージック(ファイルシステムディレクトリ)
#define CSIDL_DESKTOPDIRECTORY &H10     'デスクトップ上のファイルオブジェクトを格納するフォルダ(ファイルシステムディレクトリ)
#define CSIDL_DRIVES &H11               'マイコンピュータ(仮想フォルダ)
#define CSIDL_NETWORK &H12              'ネットワークコンピュータ(仮想フォルダ)
#define CSIDL_NETHOOD &H13              'NetHood(ファイルシステムディレクトリ)
#define CSIDL_FONTS &H14                'Fonts(フォントを含む仮想フォルダ)
#define CSIDL_TEMPLATES &H15            'ドキュメントテンプレートが格納されるフォルダ(ファイルシステムディレクトリ)
#define CSIDL_WINDOWS &H24              'Windowsディレクトリ
#define CSIDL_SYSTEM &H25               'Windows Systemディレクトリ
#define CSIDL_PROGRAM_FILES &H26        'Program Filesフォルダ

Var Shared Edit1 As Object
Var Shared Text1 As Object
Var Shared Button1 As Object
Var Shared Radio(14) As Object

'================================================================
'=
'================================================================
Declare Sub Mainform_Start edecl ()
Sub Mainform_Start()
    Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
    Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
    Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

    For i = 0 To 14
        Radio(i).Attach GetDlgItem("Radio" & Trim$(Str$(i + 1)))
        Radio(i).SetFontSize 14
    Next i
    ShowWindow -1
End Sub

'================================================================
'=
'================================================================
Declare Function Index bdecl () As Integer
Function Index()
    Index = val(Mid$(GetDlgRadioSelect("Radio1"), 6)) -1
End Function

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var fPath As String * 260
    Var Str As String
    Var CSIDL As Long
    Var Ret As Long

    Select Case Index
        Case 0                'CSIDL_PROGRAMS
            CSIDL = &H2
        Case 1                'CSIDL_PERSONAL
            CSIDL = &H5
        Case 2                'CSIDL_FAVORITES
            CSIDL = &H6
        Case 3                'CSIDL_STARTUP
            CSIDL = &H7
        Case 4                'CSIDL_RECENT
            CSIDL = &H8
        Case 5                'CSIDL_SENDTO
            CSIDL = &H9
        Case 6                'CSIDL_STARTMENU
            CSIDL = &HB
        Case 7                'CSIDL_MYMUSIC
            CSIDL = &HD
        Case 8                'CSIDL_DESKTOPDIRECTORY
            CSIDL = &H10
        Case 9                'CSIDL_NETHOOD
            CSIDL = &H13
        Case 10               'CSIDL_FONTS
            CSIDL = &H14
        Case 11               'CSIDL_TEMPLATES
            CSIDL = &H15
        Case 12               'CSIDL_WINDOWS
            CSIDL = &H24
        Case 13               'CSIDL_SYSTEM
            CSIDL = &H25
        Case 14               'CSIDL_PROGRAM_FILES
            CSIDL = &H26
    End Select

    ' フォルダのパスを取得
    Ret = Api_SHGetFolderPath(0, CSIDL, SHGFP_TYPE_CURRENT, 0, fPath)

    ' フォルダのパスを表示
    Edit1.SetWindowText Left$(fPath, InStr(fPath, Chr$(0)) - 1)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End