よろしくお願いします。
VistaではソフトをProgram Filesにインストールしてデータを更新した場合に隠しフォルダのAppData内のProgram Filesに保存されると思います。
そのファイルをコピーする動作をVB6.0で作成したいと考えています。
"C:\ユーザー\ユーザー名\AppData\Local\VirtualStore\Program Files\ソフト名\
の中に保存データがありますが、ディレクトリをうまく指定できません。
C:\ユーザーのユーザーはUsersとすべき?と試しましたがダメでした。
作成環境はXPです。XP上で同じ構成でフォルダを作成した場合にはうまくできました。
どのように指定すればよろしいでしょうか?
また、うまく指定ができるようになった場合、隠しフォルダを隠した状態のままでも操作は行われるでしょうか?
よろしくお願いいたします。
いつも聞いているばかりで回答など初めてですがVISTAにはデータがどこかに行ってしまって泣かされましたので。VISTA任せでフォルダーを決めるのではなく僕の場合は下記により最初からフォルダーを決めておいて明示的に指定して保存するようにしました。 Adobeなどは下記のAppDataPath1にAdobeのフォルダーを作っているようです。何かの本でみつけたものですがご参考まで。
Public Const MAX_PATH = 260
' CSIDLからパスを取得する関数の宣言
Declare Function SHGetFolderPath Lib "ShFolder.dll" _
Alias "SHGetFolderPathA" _
(ByVal hwndOwner As Long, _
ByVal nFolder As Long, _
ByVal hToken As Long, _
ByVal dwFlags As Long, _
ByVal pszPath As String) As Long
' 取り出すパスの種類を指定する定数
Public Const SHGFP_TYPE_CURRENT = 0
Public Const CSIDL_APPDATA = &H1A
Public Const CSIDL_LOCAL_APPDATA = &H1C
Public AppDataPath1, AppDataPath2
'----------------------------------------
'(例です。不足分は適当に追加してください)
Sub GetAppPath()
Dim strFolderPath As String * MAX_PATH
Dim lngWin32apiResultCode As Long
' フォルダパス1を取得
lngWin32apiResultCode = _
SHGetFolderPath(0, _
CSIDL_APPDATA, _
SHGFP_TYPE_CURRENT, _
0, _
strFolderPath)
'
AppDataPath1 = _
Left(strFolderPath, _
InStr(strFolderPath, _
vbNullChar) - 1)
' フォルダパス2を取得
lngWin32apiResultCode = _
SHGetFolderPath(0, _
CSIDL_LOCAL_APPDATA, _
SHGFP_TYPE_CURRENT, _
0, _
strFolderPath)
'
AppDataPath2 = _
Left(strFolderPath, _
InStr(strFolderPath, _
vbNullChar) - 1)
End Sub