2010-06-16 37 views
4

question基本相同,但對於VB6vb6中的CommonAppData

客戶的應用 「APPNAME」 已存儲在 CommonAppData 其配置文件。

  • 在Windows XP中爲C:\ Documents和Settings \所有 用戶\應用數據\ AppName的
  • 在Windows Vista下也就是C:\ ProgramData \ AppName的

如何獲得正確的文件名與VB6?

其他注意事項,我更喜歡使用,而不是增加一個參考SHELL32.DLL

+0

嗯? 'Shell32.dll'中的任何**都是**調用。 – MarkJ 2010-06-17 18:03:07

+0

@ MarkJ:我在說我不想在引用中添加shell32.dll(在項目菜單下)。 – DavRob60 2010-06-18 00:26:13

+2

你的意思是你不想使用你最初鏈接的VBScript代碼,因爲你不想添加任何引用?但是你不必添加任何引用,你可以使用後期綁定。像在鮑勃的答案http://stackoverflow.com/questions/3054802/commonappdata-in-vb6/3073836#3073836 – MarkJ 2010-06-21 12:16:08

回答

7

使用後期綁定:

Const ssfCOMMONAPPDATA = &H23 
Dim strCommonAppData As String 

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

發現這是一個API調用;

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 
1

卡爾·彼得森有published一個下拉VB6類中調用CSystemFolders會發現CSIDL_APPDATA,CSIDL_LOCAL_APPDATA和CSIDL_COMMON_APPDATA。

卡爾的代碼總是可靠的,不接受其它替代:)

+0

卡爾並沒有想到它通過。對於那些微不足道的東西來說,這是很多的包袱。 – Bob77 2010-06-19 00:34:58

+0

@Bob +1給你使用shell對象的答案。 – MarkJ 2010-06-21 12:17:20

+3

我也是一名卡爾球迷,但我認爲他有時會過分溺愛。像這樣的東西在一個程序的生命週期中通常只會被調用幾次,所以性能並不是真正的問題。另外,Shell32 COM接口在所有Windows版本中都沒有保持二進制兼容性,所以後期綁定在這裏是一個好主意。 – Bob77 2010-06-22 02:01:30