HTA 文件保存对话框而不是打开对话框
Posted
技术标签:
【中文标题】HTA 文件保存对话框而不是打开对话框【英文标题】:HTA file save dialog instead of open dialog 【发布时间】:2016-10-27 05:08:03 【问题描述】:我想使用文件输入来打开保存对话框而不是打开对话框。这将允许用户给出输出位置。在我的应用程序中。
我的 HTA 代码是
<html>
<head>
<title>HTA Test</title>
<HTA:APPLICATION
ID="objTest"
APPLICATIONNAME="HTATest"
SCROLL="yes"
SINGLEINSTANCE="yes"
>
<script>
function sync()
var InputTextbox = document.getElementById('InputTextbox');
var OutputTextbox = document.getElementById('OutputTextbox');
OutputTextbox.value = InputTextbox.value;
</script>
</head>
<SCRIPT LANGUAGE="VBScript">
Sub TestSub
Set Shell = CreateObject("WScript.Shell")
Shell.run "h:\tools\ffmpeg\bin\ffmpeg.exe -i "& InputTextbox.Value & " " & OutputTextbox.Value
End Sub
</SCRIPT>
<body bgcolor="buttonface">
<p><font face="verdana" color="red">VOB to MP4 Converter</font></p>
<p>
Input : <input type="file" name="InputTextbox" size="30"><P>
Output: <input type="text" name="OutputTextbox" size="30"
><font>Please change file extention to required format</font><br>
<input id=runbutton type="button" value="Convert!" name="run_button" onClick="TestSub">
</p>
</body>
提前致谢
【问题讨论】:
请检查my answer 到VBScript file or folder selection 是否有帮助? 这和批处理文件有什么关系? 【参考方案1】:“另存为”对话框from what I've read 没有本机 Windows 脚本主机界面。我发现生成对话框的最简单方法是从 .NET 中借用。 PowerShell 很容易处理 .NET 对象。这是一个 Batch / PowerShell 混合脚本,它将打开“另存为”对话框,强制使用 .mp4 扩展名:
<# : batch portion
@powershell -noprofile "iex ($%~f0 | out-string)"
@exit /b
: end batch / begin PowerShell #>
add-type -as System.windows.forms
$save = New-Object Windows.Forms.SaveFileDialog
$save.initialDirectory = $pwd.path
$save.filter = "MP4 files (*.mp4)|*.mp4"
$save.ShowHelp = $true
[void]$save.ShowDialog()
$save.filename
考虑到这一点,您可以将脚本写入 %temp% 并使用Shell.Exec() 执行它,以便在您的 HTA 脚本函数中捕获 STDOUT。脚本完成后,可以删除临时批处理文件。请参阅以下示例中的saveDlg()
函数。
<html>
<head>
<title>HTA Test</title>
<HTA:APPLICATION
ID="objTest"
APPLICATIONNAME="HTATest"
SCROLL="yes"
SINGLEINSTANCE="yes"
>
</head>
<textarea style="display: none" id="save_bat">
<# : batch portion
@powershell -noprofile -window hidden "iex ($%~f0 | out-string)"
@exit
: end batch / begin PowerShell #>
add-type -as System.windows.forms
$save = New-Object Windows.Forms.SaveFileDialog
$save.initialDirectory = $pwd.path
$save.filter = "MP4 files (*.mp4)|*.mp4"
$save.ShowHelp = $true
[void]$save.ShowDialog()
$save.filename
</textarea>
<script language="javascript">
function saveDlg()
var fso = new ActiveXObject("Scripting.FileSystemObject"),
shell = new ActiveXObject("WScript.Shell"),
temp = shell.Environment("Process")("temp"),
batfile = fso.createTextFile(temp + "\\save.bat", true),
saveLoc;
batfile.write(document.getElementById("save_bat").value);
batfile.close();
var proc = shell.Exec(temp + "\\save.bat");
while (!proc.Status && !saveLoc)
saveLoc = proc.StdOut.ReadLine();
proc.Terminate();
fso.DeleteFile(temp + "\\save.bat", 1);
return saveLoc;
function goBabyGo()
var shell = new ActiveXObject("Wscript.Shell");
shell.run("h:\\tools\\ffmpeg\\bin\\ffmpeg.exe -i "
+ document.getElementById("InputTextbox").value
+ ' '
+ document.getElementById('OutputTextbox').value
);
</script>
<body bgcolor="buttonface">
<p><font face="verdana" color="red">VOB to MP4 Converter</font></p>
<p>
Input : <input type="file" id="InputTextbox" size="30" />
</p>
<p>
Output: <input type="text" id="OutputTextbox" size="30" readonly />
<button onclick="document.getElementById('OutputTextbox').value = saveDlg()">Save As...</button>
</p>
<p>
<input id=runbutton type="button" value="Convert!" name="run_button" onClick="goBabyGo()" />
</p>
</body>
</html>
【讨论】:
以上是关于HTA 文件保存对话框而不是打开对话框的主要内容,如果未能解决你的问题,请参考以下文章
在 Silverlight SaveFileDialog 中打开文件而不是保存文件
iTextSharp:创建 PDF 文件时显示“打开/保存”对话框