2016-07-28 4 views
2

Я нашел эту функцию на GitHub, и она отлично работает для того, что мне нужно, но я не могу понять, как указать тип файла. Кажется, что он по умолчанию «все».VBScript BrowseForFile() Функция - как указать типы файлов?

Function BrowseForFile() 
    With CreateObject("WScript.Shell") 
     Dim fso : Set fso = CreateObject("Scripting.FileSystemObject") 
     Dim tempFolder : Set tempFolder = fso.GetSpecialFolder(2) 
     Dim tempName : tempName = fso.GetTempName() & ".hta" 
     Dim path : path = "HKCU\Volatile Environment\MsgResp" 
     With tempFolder.CreateTextFile(tempName) 
      .Write "<input type=file name=f><script>f.click()" & _ 
      ";(new ActiveXObject('WScript.Shell'))" & _ 
      ".RegWrite('HKCU\\Volatile Environment\\MsgResp', f.value)" & _ 
      ";close();<" & "/" & "script>" 
      .Close 
     End With 
     .Run tempFolder & "\" & tempName, 1, True 
     BrowseForFile = .RegRead(path) 
     .RegDelete path 
     fso.DeleteFile tempFolder & "\" & tempName 
    End With 
End Function 

«Пример: MsgBox BrowseForFile()

Я попытался модифицировать эту строку:

.Write "<input type=file name=f ><script>f.click()" & _ 
";(new ActiveXObject('WScript.Shell'))" & _ 
".RegWrite('HKCU\\Volatile Environment\\MsgResp', f.value)" & _ 
";close();<" & "/" & "script>" 

Для этого:

.Write "<input type=file accept=" & chr(34) & "text/plain" & chr(34) & " name=f ><script>f.click()" & _ 
";(new ActiveXObject('WScript.Shell'))" & _ 
".RegWrite('HKCU\\Volatile Environment\\MsgResp', f.value)" & _ 
";close();<" & "/" & "script>" 

Но, до сих пор не работает. Можно ли использовать эту функцию и настроить разрешенные типы файлов? Я хочу, чтобы только .csv, .txt и .log

+0

Помимо: Что вы пытаетесь достичь здесь? VBScript нельзя надежно использовать на веб-страницах (и вообще не будет работать на MSIE11 +), а Visual Basic в целом выходит. – duskwuff

+0

Я знаю. Мне в основном нравится, как легко манипулировать IE, но я знаю, что мне нужно отпустить ... Что вы рекомендуете в качестве замены? – Drivium

ответ

1

Я использовал эту функцию здесь: How to add filter to a file chooser in batch?

Function GetFileDlgEx(sIniDir,sFilter,sTitle) 
Set oDlg = CreateObject("WScript.Shell").Exec("mshta.exe ""about:<object id=d classid=clsid:3050f4e1-98b5-11cf-bb82-00aa00bdce0b></object><script>moveTo(0,-9999);eval(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(0).Read("&Len(sIniDir)+Len(sFilter)+Len(sTitle)+41&"));function window.onload(){var p=/[^\0]*/;new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(p.exec(d.object.openfiledlg(iniDir,null,filter,title)));close();}</script><hta:application showintaskbar=no />""") 
oDlg.StdIn.Write "var iniDir='" & sIniDir & "';var filter='" & sFilter & "';var title='" & sTitle & "';" 
GetFileDlgEx = oDlg.StdOut.ReadAll 
End Function 
set fso = CreateObject("Scripting.FileSystemObject") 
CurrentDirectory = fso.GetAbsolutePathName(".") 
sIniDir = CurrentDirectory &"\Myfile.csv" 
sFilter = "csv files (*.csv)|*.csv|txt files (*.txt)|*.txt|log files (*.log)|*.log|" 
sTitle = "Put a title of your program here :) (-_°)" 
MyFile = GetFileDlgEx(Replace(sIniDir,"\","\\"),sFilter,sTitle) 
wscript.echo MyFile 
+0

Святой ад - эта функция потрясающая. Спасибо тебе за это! Даже ЛУЧШЕ, чем то, что у меня было. Гораздо более настраиваемый. Ура! – Drivium

+0

Итак, я знаю о традиционном методе .BrowseForFolder, но поскольку мне нравится настройка с помощью этого сценария, например, строка заголовка и то, как она использует традиционное диалоговое окно просмотра, как я могу изменить это, чтобы просматривать только для каталога ? Другими словами, оставляя каждый аспект этого скрипта тактично, просто просматривайте каталог вместо файла. Возможное? – Drivium

Смежные вопросы