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


ユウコ  2005-09-16 20:20:06  No: 92273

初めて質問いたします。

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

下記のプログラムは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 13:07:07  No: 92274

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


ひろ  2005-11-22 21:59:41  No: 92275

これに該当していませんか?
(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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加