0

したがって、Shell.Application.BrowseForFolder() メソッドをラップする次のコードがあります。http://blogs.technet.com/b/heyscriptingguy/archive/2005/06/17/how-can-i-show-users-a-dialog-box-that-only-lets-them-selectから改作されています-folders.aspx :

Function BrowseFolder( myStartLocation, blnSimpleDialog, strPrompt )
    Const MY_COMPUTER   = &H11&
    Const WINDOW_HANDLE = 0 ' Must ALWAYS be 0

    Dim numOptions, objFolder, objFolderItem
    Dim objPath, objShell, strPath ', strPrompt

    ' Set the options for the dialog window
    'strPrompt = "Select a folder:"
    If blnSimpleDialog = True Then
        numOptions = 0      ' Simple dialog
    Else
        numOptions = &H10&  ' Additional text field to type folder path
    End If

    ' Create a Windows Shell object
    Set objShell = CreateObject( "Shell.Application" )

    ' If specified, convert "My Computer" to a valid
    ' path for the Windows Shell's BrowseFolder method
    If UCase( myStartLocation ) = "MY COMPUTER" Then
        Set objFolder = objShell.Namespace( MY_COMPUTER )
        Set objFolderItem = objFolder.Self
        strPath = objFolderItem.Path
    Else
        strPath = myStartLocation
    End If

    Set objFolder = objShell.BrowseForFolder( WINDOW_HANDLE, strPrompt, _
                                              numOptions, strPath )

    ' Quit if no folder was selected
    If objFolder Is Nothing Then
        BrowseFolder = ""
        Exit Function
    End If

    ' Retrieve the path of the selected folder
    Set objFolderItem = objFolder.Self
    objPath = objFolderItem.Path

    ' Return the path of the selected folder
    BrowseFolder = objPath
End Function

これを呼び出すコードは次のとおりです。

Function GetSLOCDir()
   Dim FSO
   Dim slocDir
   Dim cwd

   Set FSO    = GetFSO()

   slocDir = ""
   While (slocDir="" OR NOT FSO.FolderExists(slocDir))
      cwd        = FSO.GetAbsolutePathName(".")
      slocDir    = BrowseFolder(cwd, True, "Select the SLOC Directory.")
      WScript.Echo "slocDir: " & slocDir

      If (slocDir="") Then
         WScript.Echo "Aborted."
         WScript.Quit
      End If

   WEnd
   GetSLOCDir = slocDir
End Function

最初のループでは、ブラウズ ダイアログが表示されます。[新しいフォルダーの作成] をクリックすると、新しいフォルダーが作成され、フォルダー名を入力できるようになります。しかし、Enter キーを押すと、「新しいフォルダー」というメッセージに戻りますが、ファイル システムでは正しく名前が変更されます。ただし、BrowseFolder() 関数は「新しいフォルダー」を返すため、ループが繰り返されます。新しい参照ダイアログに正しいフォルダー名が表示されるので、それを選択できます。

しかし、これは不格好に思えます。これは BrowseForFolder メソッドのバグですか?

ありがとう

4

1 に答える 1

0

最初に私の英語で申し訳ありません。このスクリプトは、cscript.exe または 64 ビット版の wscript.exe を使用して実行できます。32bit版にはこのバグがあります。

于 2013-11-13T08:48:58.200 に答える