''' <summary>
''' Windows系统的特殊文件夹
''' </summary>
Public Class SpecialFolder
#Region "【API函数】"
''' <summary>
''' 【API函数】获取本地的特殊目录
''' </summary>
''' <param name="hwndOwner">指定的所有者窗口,通常为0</param>
''' <param name="nFolder">要获取的目录类型</param>
''' <param name="ppidl">获得的特殊目录在特殊目录列表中的地址</param>
''' <returns></returns>
Private Declare Function SHGetSpecialFolderLocation Lib "Shell32" (ByVal hwndOwner As Long, ByVal nFolder As Integer, ByRef ppidl As Long) As Long
''' <summary>
''' 【API函数】根据某特殊目录在特殊目录列表中的地址获取该目录的准确路径
''' </summary>
''' <param name="pidl">获得的特殊目录在特殊目录列表中的地址,也即SHGetSpecialFolderLocation所获得的地址</param>
''' <param name="szPath">用来保存返回的特殊目录的准确路径</param>
''' <returns></returns>
Private Declare Function SHGetPathFromIDList Lib "Shell32" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal szPath As String) As Long
''' <summary>
''' 【API函数】获取Windows安装文件夹路径
''' </summary>
''' <param name="lpBuffer">存储路径字符串的变量</param>
''' <param name="nSize">路径字符串的最大长度</param>
''' <returns>存储路径字符串长度的变量</returns>
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
''' <summary>
''' 【API函数】获取System系统文件夹路径
''' </summary>
''' <param name="lpBuffer">存储路径字符串的变量</param>
''' <param name="nSize">路径字符串的最大长度</param>
''' <returns>存储路径字符串长度的变量</returns>
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
''' <summary>
''' 【API函数】获取系统临时文件夹路径
''' </summary>
''' <param name="nBufferLength">路径字符串的最大长度</param>
''' <param name="lpBuffer">存储路径字符串的变量</param>
''' <returns>存储路径字符串长度的变量</returns>
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
#End Region
''' <summary>字符串最大长度</summary>
Const MAX_LEN = 200
#Region "【枚举】SpecialFolders:特殊文件夹代码,SHGetSpecialFolderLocation的Nfloder值"
''' <summary>
''' 【枚举】特殊文件夹代码,SHGetSpecialFolderLocation的Nfloder值
''' </summary>
Enum SpecialFolders
''' <summary>桌面</summary>
DESKTOP = &H0&
''' <summary>程序集</summary>
PROGRAMS = &H2&
''' <summary>我的文档</summary>
MYDOCUMENTS = &H5&
''' <summary>收藏夹</summary>
MYFAVORITES = &H6&
''' <summary>启动</summary>
STARTUP = &H7&
''' <summary>最近打开的文件</summary>
RECENT = &H8&
''' <summary>发送</summary>
SENDTO = &H9&
''' <summary>开始菜单</summary>
STARTMENU = &HB&
''' <summary>网上邻居</summary>
NETHOOD = &H13&
''' <summary>字体</summary>
FONTS = &H14&
''' <summary>ShellNew</summary>
SHELLNEW = &H15&
''' <summary>ApplicationData</summary>
APPDATA = &H1A&
''' <summary>PrintHood</summary>
PRINTHOOD = &H1B&
''' <summary>网页临时文件</summary>
PAGETMP = &H20&
''' <summary>Cookies目录</summary>
COOKIES = &H21&
''' <summary>历史</summary>
HISTORY = &H22&
''' <summary>System系统文件夹</summary>
SYSTEM = 100
''' <summary>Windows安装文件夹</summary>
WINDOWS = 101
''' <summary>临时文件夹</summary>
TEMP = 200
End Enum
#End Region
#Region "【函数】GetSpecialFolder:获取特殊文件夹路径"
''' <summary>
''' 【函数】获取特殊文件夹路径
''' </summary>
''' <param name="SpecialFolder">特殊文件类型</param>
''' <returns>特殊文件夹路径</returns>
Shared Function GetSpecialFolder(SpecialFolder As SpecialFolders) As String
Dim sTmp As String = StrDup(MAX_LEN, Chr(0)) '存放结果的固定长度的字符串
Dim nLength As Long = 0 '字符串的实际长度
Dim pidl As Long '某特殊目录在特殊目录列表中的位置
If SpecialFolder = 200 Then
nLength = GetTempPath(MAX_LEN, sTmp)
Return Left(sTmp, nLength)
ElseIf SpecialFolder = 101
nLength = GetWindowsDirectory(sTmp, MAX_LEN)
Return Left(sTmp, nLength)
ElseIf SpecialFolder = 100
nLength = GetSystemDirectory(sTmp, MAX_LEN)
Return Left(sTmp, nLength)
Else
SHGetSpecialFolderLocation(0, SpecialFolder, pidl)
SHGetPathFromIDList(pidl, sTmp)
Return Left(sTmp, InStr(sTmp, Chr(0)) - 1)
End If
End Function
#End Region
End Class
【VBNet】用API函数获取各种Windows系统特殊目录
于 2022-05-30 18:32:15 首次发布