マイドキュメントのターゲットを変更するには?


ユウコ  2005-09-16 11:20:06  No: 92273  IP: [192.*.*.*]

初めて質問いたします。

マイドキュメントのターゲットを割り当て済みのネットワークドライブに
マシーンを再起動することなく変更したいです。

下記のプログラムは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で再起動不必要のマイドキュメントのターゲットの変更方法をご存知の方、ご教授いただけないでしょうか?

編集 削除
ヤマ@文系  2005-11-22 04:07:07  No: 92274  IP: [192.*.*.*]

functionでなくsubにかえてみてください。(これは適当ですけど)
それかレジストリなのかな・・?

編集 削除
ひろ  2005-11-22 12:59:41  No: 92275  IP: [192.*.*.*]

これに該当していませんか?
(IEで文字化けする場合はエンコードをUTF-8にして表示して下さい)
http://groups.inetbot.com/showgrp/microsoft_ppublic_pjp_pvisualc_s22.html

Shell APIのdllのバージョンによってCIDSL_PERSONALの仕様が違うようです。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/enums/csidl.asp

バージョンの一覧はこちら。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/versions.asp

編集 削除