获得系统文件夹信息
在.NET Compact Framework应用程序中调用SHGetSpecialFolderPath函数比较麻烦,下面就介绍该函数的使用方法。为了让SHGetSpecialFolderPath函数更加容易使用,可以建立一个模块,在模块中加入常用该函数的声明,然后在开发Pocket PC应用程序时使用。
调用SHGetSpecialFolderPath函数首先要为nFolder参数定义CSIDL值。清单11-1给出了CSIDL值的声明。
清单11-1:nFolder参数的可选CSIDL值
Public Enum ceFolders As Integer DESKTOP = 0 ' /My Documents PROGRAMS = 2 ' /Windows/”开始”菜单/程序 PERSONAL = 5 ' /My Documents FAVORITES = 6 ' /Windows/Favorites STARTUP = 7 ' /Windows/启动 STARTMENU = &HB ' /Windows/Start Menu FONTS = &H14 ' /Windows/Fonts End Enum
|
其次是增加如清单11-2所示的SHGetSpecialFolderPath函数声明。该声明需要增加到模型的声明部分。
清单11-2:SHGetSpecialFolderPath函数声明
<System.Runtime.InteropServices.DllImport("coredll.dll")> _ Private Function SHGetSpecialFolderPath( _ ByVal hwndOwner As Integer, _ ByVal lpszPath As String, _ ByVal nFolder As ceFolders, _ ByVal fCreate As Boolean) As Boolean End Function
|
封装SHGetSpecialFolderPath函数
在.NET Compact Framework应用程序中调用SHGetSpecialFolderPath函数比较麻烦,最好的办法就是对SHGetSpecialFolderPath函数进行封装。这里使用GetSpecialFolderPath函数来进行封装。GetSpecialFolderPath函数直接接收MyCSIDL参数,返回对应的系统文件夹路径。GetSpecialFolderPath函数如清单11-3所示。
清单11-3:GetSpecialFolderPath封装函数
Public Function GetSpecialFolderPath(ByVal MyCSIDL As ceFolders) As String Dim strWorkingPath As String = New String(" "c, 260) Dim intEndOfPath As Integer
Try SHGetSpecialFolderPath(0, strWorkingPath, MyCSIDL, False) intEndOfPath = strWorkingPath.IndexOf(Chr(0)) If intEndOfPath > -1 Then strWorkingPath = strWorkingPath.Substring(0, intEndOfPath) End If Catch ex As Exception strWorkingPath = ex.Message End Try
Return strWorkingPath End Function |
在清单11-3里,首先为返回系统文件夹的路径开辟260个字符的内存缓冲区。当SHGetSpecialFolderPath函数返回的时候,接收的路径存储在字符串的左端,以空字符(ASCII 0)结尾。
GetSpecialFolderPath函数简化了SHGetSpecialFolderPath函数的调用。以下是接收Personal、Programs、Start Menu和Startup系统文件夹的示例。
得到Personal系统文件夹
GetPersonalFolder函数如清单11-4所示,直接传递PERSONAL数值给GetSpecialFolderPath函数,返回Personal系统文件夹路径。
清单11-4:GetPersonalFolder函数
Public Function GetPersonalFolder() As String ' 返回 /My Documents. Return GetSpecialFolderPath(ceFolders.PERSONAL) End Function
|
得到Programs系统文件夹
GetProgramFolder函数如清单11-5所示,直接传递PROGRAMS数值给GetSpecialFolderPath函数,返回Programs系统文件夹路径。
清单11-5:GetProgramFolder函数
Public Function GetProgramsFolder() As String ' 返回 /Windows/Start Menu/Programs. Return GetSpecialFolderPath(ceFolders. PROGRAMS) End Function
|
获得Start Menu 系统文件夹
GetStartMenuFolder函数如清单11-6所示,直接传递STARTMENU数值给GetSpecialFolderPath函数,返回StartMenu系统文件夹路径。
清单11-6:GetStartMenuFolder函数
Public Function GetStartMenuFolder() As String '返回 /Windows/Start Menu. Return GetSpecialFolderPath(ceFolders. STARTMENU) End Function
|
获得Start up特定系统夹
GetStartupFolder函数如清单11-7所示,直接传递STARTUP数值给GetSpecialFolderPath函数,返回Startup系统文件夹路径。
清单11-7:GetStartupFolder函数
Public Function GetStartupFolder() As String '返回 /Windows/Startup. Return GetSpecialFolderPath(ceFolders. STARTUP) End Function
|