1

我找到了一些答案,但没有一个专门针对我的问题的答案,或者与 VBS 无关。

在提供特定文件扩展名时,我正在寻找一种方法来确定默认程序的完整路径。

我的最终目标是自动创建任何程序打开“.DOC”文件(通常是 MS Word)的快捷方式。但这显然会在不同的 Windows 机器上有所不同。

我很想做类似的事情:

strDefaultDOCProgram = WshShell.FindAssociatedProgram("doc")

在哪里

strDefaultDOCProgram = "C:\Program Files\Microsoft Office 15\root\office15\winword.exe"

也许有帮助? 询问 Windows 7 - 默认情况下是什么程序打开此文件

4

3 回答 3

2

我最终决定使用assocandftype命令以防万一我们想在任何其他 Windows 版本上使用此脚本。这是一个可以完成我需要的一切的函数。我希望它对某人有帮助!

Dim WshShell
Set WshShell = CreateObject("WScript.Shell")

' Should supply the program extension with period "." included
Function GetProgramPath(ext)
Dim strProg, strProgPath

' Get Program Association Handle
Set oExec =  WshShell.Exec("cmd.exe /c assoc " & ext)
strProg = oExec.StdOut.ReadLine()
strProg = Split(strProg, "=")(1)

' Get Path To Program
Set oExec =  WshShell.Exec("cmd.exe /c ftype " & strProg)
strProgPath = oExec.StdOut.ReadLine()
strProgPath = Split(strProgPath, """")(1)

' Return the program path
GetProgramPath = strProgPath

End Function

strPath = GetProgramPath(".doc")
WScript.Echo strPath
于 2013-11-11T15:23:32.887 回答
1

使用关联

assoc /?
Displays or modifies file extension associations

ASSOC [.ext[=[fileType]]]

  .ext      Specifies the file extension to associate the file type with
  fileType  Specifies the file type to associate with the file extension

和 ftype

type /?
isplays or modifies file types used in file extension associations

TYPE [fileType[=[openCommandString]]]

 fileType  Specifies the file type to examine or change
 openCommandString Specifies the open command to use when launching files
                   of this type.

assoc .doc
.doc=OpenOffice.org.Doc

ftype OpenOffice.org.Doc
OpenOffice.org.Doc="C:\Program Files\OpenOffice.org 3\program\\swriter.exe" -o "%1"

通过使用 .Exec 执行这些程序的脚本。

更新:

从命令中剪切文件规范:

>> sCmd = """C:\Program Files\OpenOffice.org 3\program\\swriter.exe"" -o ""%1"""
>> WScript.Echo sCmd
>> WScript.Echo Split(sCmd, """")(1)
>>
"C:\Program Files\OpenOffice.org 3\program\\swriter.exe" -o "%1"
C:\Program Files\OpenOffice.org 3\program\\swriter.exe

更新二:

不要使用 .RegRead 试图在本周版本的注册表中查找信息;assoc 和 ftype 是您的操作系统为您的问题提供的工具。

于 2013-11-08T20:22:53.223 回答
0

打开文件的方式随着时间的推移而改变。您正在谈论打开文件的传统方式,这仍然是最常见的。

开始。

要支持 Office,您可以输入 win.ini *.doc=c:\winword.exe。

关联是每个用户和每个机器的,每个用户的设置覆盖机器设置。

在 NT/Win 95 中它被扩展了。因此 HKCR.ext 可以保存打开字符串 (\shell\open) 以与 win.ini 兼容,但更典型的是指向文件类,例如 HKCR.txt=txtfile。查找 HKCR\txtfile\shell\open 给了你命令。

由于程序窃取文件关联,现在有一层其他关联覆盖它。因此,该命令是从上面构建的,这些较新的键 HKEY_CLASSES_ROOT\SystemFileAssociations(其中还包括通用文件类型的新概念的关联 - 图片或音乐)或 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts。

对于 Word,它是使用 DDE(也在上述注册表项中指定)打开的,而不仅仅是命令行。也就是说,它作为 DDE 服务器启动,然后将带有要打开的文件名的 fileopen 命令发送给它

打开文件的新方法。

现在使用 COM 打开文件。程序在上述键下注册 IDropTarget。

上下文菜单处理程序可以覆盖上述内容。他们也在上面注册。

最好的方法是 shellexec 文件。它会像双击一样打开。

于 2013-11-08T20:42:01.663 回答