Windows vb6中的CommonAppData
基本上与此相同,但适用于VB6 客户的应用程序“AppName”已 其配置文件存储在 公共应用数据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 _
- 在Windows XP下,即C:\Documents and Settings\All 用户\应用程序数据\应用程序名称
- 在Windows Vista下,即C:\ProgramData\AppName
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版本之间保持二进制兼容性,因此在这里进行后期绑定是一个好主意。