从TCL打开带有相关应用程序的文件的最佳方法是什么?

时间:2011-12-30 22:44:36

标签: windows tcl

我在Windows上有一个TCL / TK应用程序。使用相关程序打开文件的最佳方法是什么?例如,我正在生成PDF,我希望它自动打开。

我一直在使用:

proc OpenDocument {filename} {
    if {[catch {
        exec rundll32.exe url.dll,FileProtocolHandler $filename &
    }]} {
        tk_messageBox -message "Error opening $filename."
    }
}

但我不确定它有多强大,我希望有更好的错误信息。例如,我怎样才能检测是否安装了任何程序并与PDF相关联?

我知道许多程序(包括Foxit PDF Reader)在“HKEY_CLASSES_ROOT.extension”下添加了一个注册表项,但Adobe Reader似乎使用了不同的系统。

有没有最佳做法?我将把我的程序部署到几百个用户,我想相当确定如果有人有奇怪的配置,就不会有广泛的问题。

感谢。

3 个答案:

答案 0 :(得分:4)

我会写(对于Tcl 8.5)

exec {*}[auto_execok start] "" $filename

(讨论here)。 这可能会显示一个cmd窗口。

如果您有更早的Tcl,

eval exec [auto_execok start] {""} [list $filename]

答案 1 :(得分:0)

有一个例子可以看到registry man page

上的关联
package require registry
set ext .tcl

# Read the type name
set type [registry get HKEY_CLASSES_ROOT\\$ext {}]
# Work out where to look for the command
set path HKEY_CLASSES_ROOT\\$type\\Shell\\Open\\command
# Read the command!
set command [registry get $path {}]

puts "$ext opens with $command"

答案 2 :(得分:0)

记录:使用Tcl扩展名TWAPI,您可能还需要看一下:

twapi::shell_execute -path $filename