我需要通过命令行应用程序快速编写一个简单的 GUI。需要两个步骤:
我发现了一篇上一篇文章,但是尝试让上述(1)工作似乎是一项疯狂的任务。
确实 BrowseForFolder 似乎只在某些奇怪的情况下工作,您只能将
BIF_BROWSEINCLUDEFILES
用于 *.pdf
和/或 *.txt
(尝试和错误)。如果我选择 *.dll
和/或 *.jpg
(不要问),我会收到错误消息。
因此,我放弃了这种方法并遵循了另一种,在这种情况下(
objIE.Document.all.FileSelect
),仅返回所选文件的name,由于某种原因路径似乎总是设置为"c:/fakepath"
。所以我再次错过了能够将其传递给命令行应用程序的完整路径。
有什么明智的方法吗(<10 lines of codes) to get (1) and (2) working on Win7/64bits (VBS, HTA...)?
不知道人们是否仍然对 BrowseForFolder 文件选择问题感兴趣,但这是我发现的。 我在使用 &H4000 / BIF_BROWSEINCLUDEFILES 与 BrowseForFolder 选择文件时遇到了同样的问题。我可以得到 .docx 的回报,但不能得到 .doc 文件和正如你所说的 .pdf 文件。 对我来说 .txt 不会返回任何内容,就像我正在编写的脚本所需的 WMI Backup .rec 文件一样,导致以下错误信息:-
Error: Unspecified error
Code: 80004005
Source: (null)
在查看了其他解决方案后,我又回到了这个解决方案作为我的首选,而且它让我很头疼,因为它不想工作。所以在痛苦的结局中,这似乎很容易。 为了让我的 .rec 文件被识别,我将其添加到注册表中:-
[HKEY_CLASSES_ROOT\.rec]
@="WMI.Backup"
[HKEY_CLASSES_ROOT\WMI.Backup]
@="WMI Backup"
"BrowseInPlace"="1"
为了识别 .txt 文件,我将其添加到注册表中:-
[HKEY_CLASSES_ROOT\txtfile]
"BrowseInPlace"="1"
所以“BrowseInPlace”=“1”似乎是关键。
看起来非常简单,我确信这个解决方案就在某个地方,但我从未遇到过它,所以我想我会把它放在网上。
我有兴趣发现它对其他人有效,因为我担心这个问题可能会让我发疯,但仍然不敢相信它似乎有效。 希望这有帮助。
如果您需要一次只打开一个文件,您可以使用旧式 html 标签 在 IE9 兼容模式下:在此模式下,输入将返回单个选定文件的完整路径。但需要注意的是,您不能对具有接受属性的文件类型使用多个属性或过滤器。
如果您想使用接受和多个属性,您必须将 IE=10 兼容模式设置到元标记内容属性中,以便您可以使用以下组合之一:
<meta charset="UTF-8" http-equiv="x-ua-compatible" content="IE=9"/>
<input type="file"/>
您可以使用 hta 功能,但不能让接受和多个属性用于输入类型=“文件”
或
<meta charset="UTF-8" http-equiv="x-ua-compatible" content="IE=10"/>
<input type="file" accept="*.txt,*.doc" multiple />
在这种情况下反之亦然,但代价是失去一些 hta 功能。
当然你必须将meta标签放入hta的head中,并将input标签放入body中。
还有一些解决方法,例如使用两个不同的 hta 文件:
但据我所知,要在一个文件中协调一致地工作并不容易
无需编辑 Win 寄存器或无需使用第三部分 dll 或其他解决方法:因此似乎没有直接而干净的方法可以轻松完成此操作。
这里有 3 种不同的方法可以满足您的需求:
http://www.robvanderwoude.com/vbstech_ui_fileopen.php