【VBNet】用API函数获取各种Windows系统特殊目录

''' <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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值