|
3#
楼主 |
发表于 2015-4-1 22:28:57
|
只看该作者
如何用VB获得Windows各类系统目录
现在有很多关于如何用VB获得Windows目录的文章,但大都只讲到如何获得Windows目录和System目录,有时候我们却需要获得像"我的文档"这样的目录("我的文档"的路径并不是固定的,可以由自己设定,也有可能因为系统的安装路径不同而不同),那又该如何处理呢?下面我们来具体谈谈如何用VB获得这种路径。
一、先向大家介绍两个API函数,这两个函数分别是SHGetSpecialFolderLocation和SHGetPathFromIDList 这就是我们用来获得各种路径的武器。
函数声明:
- Private Declare Function SHGetSpecialFolderLocation Lib "Shell32" (ByVal hwndOwner As Long, ByVal nFolder As Integer, ppidl As Long) As Long
- Private Declare Function SHGetPathFromIDList Lib "Shell32" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal szPath As String) As Long
复制代码
函数功能及参数说明:
SHGetSpecialFolderLocation:获得某个特殊目录在特殊目录列表中的位置;它有三个参数,第一个参数是用来指定所有者窗口的,在应用中一般我们写上"0"就可以了;第二个参数是一个整数id,它决定要查找的目录是哪一个目录,它的取值可能如下:
- &H0& '桌面
- &H2& '程序集
- &H5& '我的文档
- &H6& '收藏夹
- &H7& '启动
- &H8& '最近打开的文件
- &H9& '发送
- &HB& '开始菜单
- &H13& '网上邻居
- &H14& '字体
- &H15& 'ShellNew
- &H1A& 'Application Data
- &H1B& 'PrintHood
- &H20& '网页临时文件
- &H21& 'Cookies目录
- &H22& '历史
复制代码
第三个参数是获得的特殊目录在特殊目录列表中的地址。
SHGetPathFromIDList:根据某特殊目录在特殊目录列表中的地址获取该目录的准确路径。它有两个参数,第一个参数是特殊目录在特殊目录列表中的地址,也即上一个函数所获得的地址;第二个参数是一个字符串型数据,用来保存返回的特殊目录的准确路径。
比如:为了获得DeskTop的路径,首先需调用SHGetSpecialFolderLocation获得DeskTop在特殊目录列表中的位置Pid,然后调用SHGetPathFromIDList函数获得Pid指向的列表内容,即DeskTop的准确路径。
二、一个用来获取Windows各种目录路径的例子如下:
- Private Declare Function SHGetSpecialFolderLocation Lib "Shell32" (ByVal hwndOwner As Long, ByVal nFolder As Integer, ppidl As Long) As Long
- Private Declare Function SHGetPathFromIDList Lib "Shell32" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal szPath As String) As Long
- Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
- Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
- Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
- Const MAX_LEN = 200 '字符串最大长度
- Const DESKTOP = &H0& '桌面
- Const PROGRAMS = &H2& '程序集
- Const MYDOCUMENTS = &H5& '我的文档
- Const MYFAVORITES = &H6& '收藏夹
- Const STARTUP = &H7& '启动
- Const RECENT = &H8& '最近打开的文件
- Const SENDTO = &H9& '发送
- Const STARTMENU = &HB& '开始菜单
- Const NETHOOD = &H13& '网上邻居
- Const FONTS = &H14& '字体
- Const SHELLNEW = &H15& 'ShellNew
- Const APPDATA = &H1A& 'Application Data
- Const PRINTHOOD = &H1B& 'PrintHood
- Const PAGETMP = &H20& '网页临时文件
- Const COOKIES = &H21& 'Cookies目录
- Const HISTORY = &H22& '历史
- Private Sub Command2_Click()
- End
- End Sub
- Private Sub Form_Load()
- Dim sTmp As String * MAX_LEN '存放结果的固定长度的字符串
- Dim nLength As Long '字符串的实际长度
- Dim pidl As Long '某特殊目录在特殊目录列表中的位置
- '*************************获得Windows目录**********************************
- Length = GetWindowsDirectory(sTmp, MAX_LEN)
- Debug.Print Left(sTmp, Length)
- '*************************获得System目录***********************************
- Length = GetSystemDirectory(sTmp, MAX_LEN)
- Debug.Print Left(sTmp, Length)
- '*************************获得Temp目录***********************************
- Length = GetTempPath(MAX_LEN, sTmp)
- Debug.Print Left(sTmp, Length)
- '*************************获得DeskTop目录**********************************
- SHGetSpecialFolderLocation 0, DESKTOP, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '*************************获得发送到目录**********************************
- SHGetSpecialFolderLocation 0, SENDTO, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '*************************获得我的文档目录*********************************
- SHGetSpecialFolderLocation 0, MYDOCUMENTS, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '*************************获得程序集目录***********************************
- SHGetSpecialFolderLocation 0, PROGRAMS, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '*************************获得启动目录*************************************
- SHGetSpecialFolderLocation 0, STARTUP, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '*************************获得开始菜单目录*********************************
- SHGetSpecialFolderLocation 0, STARTMENU, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '*************************获得收藏夹目录***********************************
- SHGetSpecialFolderLocation 0, MYFAVORITES, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '**********************获得最后打开的文件目录*******************************
- SHGetSpecialFolderLocation 0, RECENT, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '*************************获得网上邻居目录*********************************
- SHGetSpecialFolderLocation 0, NETHOOD, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '*************************获得字体目录**********************************
- SHGetSpecialFolderLocation 0, FONTS, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '*************************获得Cookies目录**********************************
- SHGetSpecialFolderLocation 0, COOKIES, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '*************************获得历史目录**********************************
- SHGetSpecialFolderLocation 0, HISTORY, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '***********************获得网页临时文件目录*******************************
- SHGetSpecialFolderLocation 0, PAGETMP, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '*************************获得ShellNew目录*********************************
- SHGetSpecialFolderLocation 0, SHELLNEW, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '***********************获得Application Data目录*****************************
- SHGetSpecialFolderLocation 0, APPDATA, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- '*************************获得PrintHood目录*********************************
- SHGetSpecialFolderLocation 0, PRINTHOOD, pidl
- SHGetPathFromIDList pidl, sTmp
- Debug.Print Left(sTmp, InStr(sTmp, Chr(0)) - 1)
- End Sub
复制代码
|
|