我在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似乎使用了不同的系统。
有没有最佳做法?我将把我的程序部署到几百个用户,我想相当确定如果有人有奇怪的配置,就不会有广泛的问题。
感谢。
答案 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,您可能还需要看一下: