|
SHBrowseForFolderを使用して、Default表示Folderを変更するVersion
長さ制限で引っかかったので・・・
宣言部分だけ・・・
'///////////////////////////////////////////////////////////////////////////////////////////
'モジュール内共通構造体
'///////////////////////////////////////////////////////////////////////////////////////////
'[BROWSEINFO]構造体([SHBrowseForFolder]で使用する構造体)
Private Type tagBROWSEINFO
hOwner As Long '親Windowのハンドル
pidlRoot As Long 'ルートフォルダのポインタ(PID)
pszDisplayName As String '選択されたフォルダ名
lpszTitle As String 'ダイアログに表示する文字列
ulFlags As Long 'オプションフラグ(BrowseInfoFlags)
lpfn As Long 'コールバック関数のアドレス
lParam As Long 'コールバック関数へのパラメータ
iImage As Long 'フォルダ用アイコンのシステムイメージリストID(不用のとき0)
End Type
'///////////////////////////////////////////////////////////////////////////////////////////
'共通定数
'///////////////////////////////////////////////////////////////////////////////////////////
Private Const MAX_PATH As Long = 260& 'パス長最大値
Private Const WM_USER As Long = &H400& 'アプリケーションメッセージコード範囲の開始値
'[BROWSEINFO]構造体使用ルートフォルダ(PID)列挙型定数(pidlRoot)
Public Enum gEnumCSIDL
CSIDL_DESKTOP = &H0&
CSIDL_INTERNET = &H1&
CSIDL_PROGRAMS = &H2&
CSIDL_CONTROLS = &H3&
CSIDL_PRINTERS = &H4&
CSIDL_PERSONAL = &H5&
CSIDL_FAVORITES = &H6&
CSIDL_STARTUP = &H7&
CSIDL_RECENT = &H8&
CSIDL_SENDTO = &H9&
CSIDL_BITBUCKET = &HA&
CSIDL_STARTMENU = &HB&
CSIDL_MYDOCUMENTS = &HC&
CSIDL_MYMUSIC = &HD&
CSIDL_MYVIDEO = &HE&
CSIDL_DESKTOPDIRECTORY = &H10&
CSIDL_DRIVES = &H11&
CSIDL_NETWORK = &H12&
CSIDL_NETHOOD = &H13&
CSIDL_FONTS = &H14&
CSIDL_TEMPLATES = &H15&
CSIDL_COMMON_STARTMENU = &H16&
CSIDL_COMMON_PROGRAMS = &H17&
CSIDL_COMMON_STARTUP = &H18&
CSIDL_COMMON_DESKTOPDIRECTORY = &H19&
CSIDL_APPDATA = &H1A&
CSIDL_PRINTHOOD = &H1B&
CSIDL_LOCAL_APPDATA = &H1C&
CSIDL_ALTSTARTUP = &H1D&
CSIDL_COMMON_ALTSTARTUP = &H1E&
CSIDL_COMMON_FAVORITES = &H1F&
CSIDL_INTERNET_CACHE = &H20&
CSIDL_COOKIES = &H21&
CSIDL_HISTORY = &H22&
CSIDL_COMMON_APPDATA = &H23&
CSIDL_WINDOWS = &H24&
CSIDL_SYSTEM = &H25&
CSIDL_PROGRAM_FILES = &H26&
CSIDL_MYPICTURES = &H27&
CSIDL_PROFILE = &H28&
CSIDL_SYSTEMX86 = &H29&
CSIDL_PROGRAM_FILESX86 = &H2A&
CSIDL_PROGRAM_FILES_COMMON = &H2B&
CSIDL_PROGRAM_FILES_COMMONX86 = &H2C&
CSIDL_COMMON_TEMPLATES = &H2D&
CSIDL_COMMON_DOCUMENTS = &H2E&
CSIDL_COMMON_ADMINTOOLS = &H2F&
CSIDL_ADMINTOOLS = &H30&
CSIDL_CONNECTIONS = &H31&
CSIDL_COMMON_MUSIC = &H35&
CSIDL_COMMON_PICTURES = &H36&
CSIDL_COMMON_VIDEO = &H37&
CSIDL_RESOURCES = &H38&
CSIDL_RESOURCES_LOCALIZED = &H39&
CSIDL_COMMON_OEM_LINKS = &H3A&
CSIDL_CDBURN_AREA = &H3B&
End Enum
'[BROWSEINFO]構造体使用オプションフラグ列挙型定数(ulFlags)
Public Enum BrowseInfoFlags
BIF_RETURNONLYFSDIRS = &H1
BIF_DONTGOBELOWDOMAIN = &H2
BIF_STATUSTEXT = &H4
BIF_RETURNFSANCESTORS = &H8
BIF_EDITBOX = &H10
BIF_VALIDATE = &H20
BIF_NEWDIALOGSTYLE = &H40
BIF_USENEWUI = (BIF_NEWDIALOGSTYLE Or BIF_EDITBOX)
BIF_BROWSEINCLUDEURLS = &H80
BIF_UAHINT = &H100
BIF_NONEWFOLDERBUTTON = &H200
BIF_NOTRANSLATETARGETS = &H400
BIF_BROWSEFORCOMPUTER = &H1000
BIF_BROWSEFORPRINTER = &H2000
BIF_BROWSEINCLUDEFILES = &H4000
BIF_SHAREABLE = &H8000
End Enum
'コールバック関数が受信するメッセージコード列挙型定数(uMsg)
Private Enum BFFM_CallBackMsgCode ' [説明] [lParam]
BFFM_INITIALIZED = 1 '初期化終了コード NULL
BFFM_SELECTIONCHANGE = 2 '設定変更コード 選択フォルダPID
BFFM_VALIDATEFAILED = 3 'EditBox入力値エラー EditBox入力値PID
End Enum
'[SendMessage]で[SHBrowseForFolder]に送信できるメッセージコード列挙型定数(wMsg)
Private Enum BFFM_SendMsgCode ' [説明] [wParam] [lParam]
BFFM_SETSTATUSTEXTA = (WM_USER + 100) 'ステータス変更 設定するテキスト
BFFM_ENABLEOK = (WM_USER + 101) 'OKボタン有効/無効設定 0:無効, 以外:有効
BFFM_SETSELECTIONA = (WM_USER + 102) '初期フォルダの設定 0 フォルダPID
' 1 文字列のポインタ
End Enum
'///////////////////////////////////////////////////////////////////////////////////////////
'モジュール内有効API定義
'///////////////////////////////////////////////////////////////////////////////////////////
'-------------------------------------------------------------------------------------------
'[FindWindow](ウィンドウハンドルを返すAPI)宣言
'
'戻り値 0:失敗, 1:成功
'
'引数 lpClassName 対象クラス名(String)
' lpWindowName 対象ウィンドウのタイトル(String)
'-------------------------------------------------------------------------------------------
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'-------------------------------------------------------------------------------------------
'[SHBrowseForFolder](フォルダ選択ダイアログAPI)宣言
'
'戻り値 選択フォルダのPID(Long)
'
'引数 lpBrowseInfo [BROWSEINFO]構造体のアドレス(tagBROWSEINFO)
'-------------------------------------------------------------------------------------------
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" _
(lpBrowseInfo As tagBROWSEINFO) As Long
'-------------------------------------------------------------------------------------------
'[SHGetPathFromIDList](PIDをパス名に変換するAPI)宣言
'
'戻り値 対象アイテムのパス名
'
'引数 pidl 対象アイテムのPID(Long)
' pszPath 対象アイテムのパス名(String)
'-------------------------------------------------------------------------------------------
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _
(ByVal pidl As Long, ByVal pszPath As String) As Long
'-------------------------------------------------------------------------------------------
'[CoTaskMemFree](タスクのメモリブロックを解放するAPI)宣言
'
'引数 pv 解放するブロックへのポインタID(Long)
'-------------------------------------------------------------------------------------------
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)
'-------------------------------------------------------------------------------------------
'[SendMessage](指定されたハンドルへメッセージを送るAPI)宣言
'
'引数 hwnd 対象ウインドウハンドル(Long)
' wMsg 送信メッセージ(Long)
' wParam メッセージパラメータ1(Long)
' lParam メッセージパラメータ2(Long)
'-------------------------------------------------------------------------------------------
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As BFFM_SendMsgCode, ByVal wParam As Long, lParam As Any) As Long
'///////////////////////////////////////////////////////////////////////////////////////////
'共通変数
'///////////////////////////////////////////////////////////////////////////////////////////
Private mstrDefaultPath As String '初期表示フォルダ
|
|