Windows vb6中的CommonAppData

Windows vb6中的CommonAppData,windows,shell,vb6,special-folders,Windows,Shell,Vb6,Special Folders,基本上与此相同,但适用于VB6 客户的应用程序“AppName”已 其配置文件存储在 公共应用数据 在Windows XP下,即C:\Documents and Settings\All 用户\应用程序数据\应用程序名称 在Windows Vista下,即C:\ProgramData\AppName 如何使用VB6获取正确的文件夹名? 另外,我更喜欢使用API调用,而不是添加对shell32.dll的引用 Private Declare Function SHGetFolderPath _

基本上与此相同,但适用于VB6

客户的应用程序“AppName”已 其配置文件存储在 公共应用数据

  • 在Windows XP下,即C:\Documents and Settings\All 用户\应用程序数据\应用程序名称
  • 在Windows Vista下,即C:\ProgramData\AppName
如何使用VB6获取正确的文件夹名?

另外,我更喜欢使用API调用,而不是添加对shell32.dll的引用

Private Declare Function SHGetFolderPath _
                        Lib "shfolder.dll" Alias "SHGetFolderPathA" _
                        (ByVal hwndOwner As Long, _
                         ByVal nFolder As Long, _
                         ByVal hToken As Long, _
                         ByVal dwReserved As Long, _
                         ByVal lpszPath As String) As Long
Private Const CSIDL_COMMON_APPDATA = &H23
Private Const CSIDL_COMMON_DOCUMENTS = &H2E

Public Function strGetCommonAppDataPath() As String
    Dim strPath As String

    strPath = Space$(512)
    Call SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, 0, strPath)
    strPath = Left$(strPath, InStr(strPath, vbNullChar))

    strGetCommonAppDataPath = strPath
End Function
Karl Peterson在VB6中有一个名为drop的类,该类将查找CSIDL_APPDATA、CSIDL_LOCAL_APPDATA和CSIDL_COMMON_APPDATA

卡尔的代码始终可靠,不接受替代品:)

使用后期绑定:

Const ssfCOMMONAPPDATA = &H23
Dim strCommonAppData As String

strCommonAppData = _
    CreateObject("Shell.Application").NameSpace(ssfCOMMONAPPDATA).Self.Path

嗯??
Shell32.dll
中的任何内容都是API调用。@MarkJ:我是说我不想在引用(在“项目”菜单下)中添加Shell32.dll。你的意思是不想使用最初链接的VBScript代码,因为你不想添加任何引用?但是您不必添加任何引用,您可以使用后期绑定。就像鲍勃的回答一样,我不知道后期绑定。我当时的印象是我无法做到这一点,因为我现在知道了用于声明objShell、objFolder和objFolderItem变量的巫婆类型。很高兴知道!是的,只要将它们声明为对象,一切都很好。卡尔还没有想清楚。对于如此琐碎的事情来说,这是一个很大的负担。@Bob+1回答你使用shell对象的答案。我也是Karl fan,但我认为他有时会过火。在一个程序的生命周期中,这样的东西通常只被调用几次,所以性能并不是一个真正的问题。此外,Shell32 COM接口没有在所有Windows版本之间保持二进制兼容性,因此在这里进行后期绑定是一个好主意。