Set Wsh = CreateObject("wscript.shell") '我的文档
MyPath = Wsh.specialfolders("mydocuments")  Set Wsh = CreateObject("wscript.shell") '桌面
  Depath = Wsh.specialfolders("desktop")
这两种方法得到我的文档和桌面的中径,我想的到"开始菜单"和"快速启动"的文件夹路径,用什么对象用以上方法,运行时进行了shell操作,KV软件会提示出错的.还有其他方法得么这些重要路径吗?

解决方案 »

  1.   

    Option ExplicitPrivate Sub Command1_Click()
        Dim Wsh
        Set Wsh = CreateObject("wscript.shell") '我的文档
        Debug.Print Wsh.specialfolders("mydocuments")
        Debug.Print Wsh.specialfolders("desktop")
        Debug.Print Wsh.specialfolders("startmenu")
        Debug.Print Wsh.specialfolders("APPDATA") & "\Microsoft\Internet Explorer\Quick Launch"
        
    End Sub
      

  2.   

    防止KV,可以用API的方法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
    Const MAX_LEN = 200 '字符串最大长度
    Const CSIDL_PROGRAM_FILES = &H26& 'PROGRAM_FILES 的CSIDPrivate Sub Command1_Click()
        Dim sTmp As String * MAX_LEN '存放结果的固定长度的字符串
        Dim nLength As Long '字符串的实际长度
        Dim pidl As Long '某特殊目录在特殊目录列表中的位置
        Dim TStr As String
        
        SHGetSpecialFolderLocation 0, CSIDL_PROGRAM_FILES, pidl
        SHGetPathFromIDList pidl, sTmp
        TStr = Left(sTmp, InStr(sTmp, Chr(0)) - 1)
        MsgBox TStr
    End Sub替换CSIDL_PROGRAM_FILES为下面的CSIDL的常数值就可以得到Windows的特殊文件的位置
      CSIDL_ADMINTOOLS($30)
        表示当前用户的“管理工具”系统文件夹
      CSIDL_ALTSTARTUP($h1D)
        不详
      CSIDL_APPDATA($1A)
        表示当前用户的特定的应用程序数据存储文件夹,例如:C:\Documents and Settings\username\Application Data
      CSIDL_BITBUCKET($A)
        表示回收站
      CSIDL_COMMON_ADMINTOOLS($2F)
        表示所有用户的“管理工具”系统文件夹
      CSIDL_COMMON_ALTSTARTUP($1D)
        表示所有用户的  (只支持WINDOWS NT 系统)
      CSIDL_COMMON_APPDATA($23)
        表示所有用户的特定的应用程序数据存储文件夹,例如:C:\Documents and Settings\All Users\Application Data
      CSIDL_COMMON_DESKTOPDIRECTORY($19)
        表示所有用户的“桌面”文件夹,例如:C:\Documents and Settings\All Users\Desktop。
      CSIDL_COMMON_DOCUMENTS($2E)
        表示所有用户的“我的文档”文件夹,例如:C:\Documents and Settings\All Users\Documents
      CSIDL_COMMON_FAVORITES($1F)
        表示所有用户的“我的收藏夹”文件夹。
      CSIDL_COMMON_PROGRAMS($17)
        表示所有用户的“程序”文件夹,例如:C:\Documents and Settings\All Users\Start Menu\Programs
      CSIDL_COMMON_STARTMENU($16)
        表示所有用户的“开始菜单”文件夹,例如:C:\Documents and Settings\All Users\Start Menu
      CSIDL_COMMON_STARTUP($18)
        表示所有用户的“启动”文件夹,例如:C:\Documents and Settings\All Users\Start Menu\Programs\Startup
      CSIDL_COMMON_TEMPLATES($2D)
        表示所有用户的“模块”文件夹,例如:C:\Documents and Settings\All Users\Templates
      CSIDL_CONTROLS($3)
        表示“控制面板”文件夹
      CSIDL_COOKIES($21)
        表示当前用户Internet Explorer的cookie 文件夹,例如:C:\Documents and Settings\username\Cookies
      CSIDL_DESKTOP($0)
        表示“桌面”虚拟文件夹,包含了计算机中的所有内容
      CSIDL_DESKTOPDIRECTORY($10)
        表示当前用户的“桌面”文件夹,例如:C:\Documents and Settings\username\Desktop
      CSIDL_DRIVES($11)
        表示“我的电脑”虚拟文件夹,包含了计算机中所有的驱动器
      CSIDL_FAVORITES($6)
        表示当前用户的“收藏夹”文件夹,例如:C:\Documents and Settings\username\Favorites
      CSIDL_FONTS($14)
        表示“系统字体”文件夹,例如:C:\WINNT\Fonts
      CSIDL_HISTORY($22)
        表示Inernet Explorer的“历史记录”文件夹
      CSIDL_INTERNET($1)
        表示Internet的这个虚拟文件夹
      CSIDL_INTERNET_CACHE($20)
        表示当前用户的Internet Explorer的"Cache"文件夹,例如:C:\Documents and Settings\username\Temporary Internet Files
      CSIDL_LOCAL_APPDATA($1C)
        表示当前用户的应用程序数据文件夹,例如:C:\Documents and Settings\username\Local Settings\Application Data
      CSIDL_MYMUSIC
        表示当前用户存储音乐文件的文件夹,例如:C:\Documents and Settings\User\My Documents\My Music
      CSIDL_MYPICTURES($27)
        表示当前用户存储图像文件的文件夹,例如:C:\Documents and Settings\username\My Documents\My Pictures
      CSIDL_NETHOOD($13)
        表示当前用户存在的网络连接的文件夹,例如:C:\Documents and Settings\username\NetHood
      CSIDL_NETWORK($12)
        表示“网上邻居”这个虚拟文件夹
      CSIDL_PERSONAL($5)
        表示当前用户的“我的文档”文件夹,例如:C:\Documents and Settings\username\My Documents
      CSIDL_PRINTERS($4)
        指向“打印机”这个虚拟文件夹
      CSIDL_PRINTHOOD($1B)
        表示当前用户存在的网络打印机的虚拟文件夹,例如:C:\Documents and Settings\username\PrintHood
      CSIDL_PROFILE($28)
        表示当前用用户配置文件的文件夹
      CSIDL_PROGRAM_FILES($26)
        表示程序文件的文件夹,例如:C:\Program Files
      CSIDL_PROGRAM_FILES_COMMON($2B)
        表示系统程序共用组件文件夹,例如:C:\Program Files\Common
      CSIDL_PROGRAMS($2)
        表示当前用户的“程序”菜单文件夹,例如:C:\Documents and Settings\username\Start Menu\Programs
      CSIDL_RECENT($8)
        表示当前用户的“文档”菜单文件夹,例如:C:\Documents and Settings\username\Start Menu\Programs
      CSIDL_SENDTO($9)
        表示当前用户的“发送到”文件夹,例如:C:\Documents and Settings\username\SendTo
      CSIDL_STARTMENU($B)
        表示当前用户的“开始”菜单文件夹,例如:C:\Documents and Settings\username\Start Menu
      CSIDL_STARTUP($7)
        表示当前用户的“启动”菜单文件夹,例如:C:\Documents and Settings\username\Start Menu\Programs\Startup
      CSIDL_SYSTEM($25)
        表示WINDOWS系统的系统文件夹,例如:C:\WINNT\SYSTEM32
      CSIDL_TEMPLATES($15)
        表示的是系统中存储文档模块的文件夹
      CSIDL_WINDOWS($24)
        表示的是系统中Windows目录的文件珍,例如:C:\WINNT    这里只是最常用的部分。完整的请参考http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/enums/csidl.asp