Well, I think I did it. Haven't seen this method anywhere before.
I'm scripting for Windows 8, and other methods are not available, or elegant.
Function OpenFileDialog(sDir, sFilter, sTitle)
With Createobject("Scripting.FileSystemObject")
If .FileExists("OUTPUT") Then .DeleteFile("OUTPUT")
CreateObject("WScript.Shell").Run _
"powershell.exe -command ""& {"& _
"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null;"& _
"$o = New-Object System.Windows.Forms.OpenFileDialog;"& _
"$o.InitialDirectory = '"& sDir &"';"& _
"$o.Filter = '"& sFilter &"';"& _
"$o.Title = '"& sTitle &"';"& _
"$o.ShowDialog() | Out-Null;"& _
"$o.filename > OUTPUT"& _
"}""",0
Do
WScript.Sleep 100
Loop While Not .FileExists("OUTPUT")
With .OpenTextFile("OUTPUT", 1, False, -1)
Do While .AtEndOfStream
WScript.Sleep 100
Loop
OpenFileDialog = .ReadLine
End With
.DeleteFile("OUTPUT")
End With
End Function
msgbox(OpenFileDialog("D:\", "|*.*", ""))