初めて質問いたします。
マイドキュメントのターゲットを割り当て済みのネットワークドライブに
マシーンを再起動することなく変更したいです。
下記のプログラムはWindowsXP Version2000 SP2では成功したのですが、
Windows2000 SP4では成功しません。
'**************************************************************
Option Explicit
Private Declare Function SHSetFolderPathW Lib "shell32.dll" Alias "#232" (ByVal csidl As Long, ByVal hToken As Long, ByVal dwFlags As Long, ByVal pszPath As Long) As Long
Const SHGFP_TYPE_DEFAULT = 1 'デフォルト
Const SHGFP_TYPE_CURRENT = 0 '現在
Const CSIDL_PERSONAL = &H5& 'My Documents
Private Sub Command1_Click()
'マイドキュメントのターゲットをテキストボックスに入力した
'ドライブ名にマシーンの再起動をすること無く変更する
Dim strPath As String
Dim lngRet As Long
Sleep (1000)
strPath = Trim(Text1.Text) '入力例 "F:\"
lngRet = SHSetFolderPathW(CSIDL_PERSONAL, -1, SHGFP_TYPE_CURRENT, StrPtr(strPath))
If lngRet = 0 Then
MsgBox "OK"
Else
MsgBox "NG:" & lngRet
End If
End Sub
'**************************************************************
NT系では"SHSetFolderPathW"関数、98系では"SHSetFolderPathA"関数を
使う、とどこかのサイトには記述してあったのですが、なぜWin2000でエラーが
返ってきてしまうのか分かりません。Shell32.dllのVersionの違いのせいで
しょうか?
この原因、またWin2000で再起動不必要のマイドキュメントのターゲットの変更方法をご存知の方、ご教授いただけないでしょうか?
functionでなくsubにかえてみてください。(これは適当ですけど)
それかレジストリなのかな・・?
これに該当していませんか?
(IEで文字化けする場合はエンコードをUTF-8にして表示して下さい)
http://groups.inetbot.com/showgrp/microsoft_ppublic_pjp_pvisualc_s22.html
Shell APIのdllのバージョンによってCIDSL_PERSONALの仕様が違うようです。
バージョンの一覧はこちら。
ツイート | ![]() |