TDL:.dan.g.'s ToDoList 的协议,对 SVN 用户很有用






4.43/5 (3投票s)
注册一个 TDL: 的伪协议,使 tdl:///filename.tdl?tid 可用
应用程序版
脚本版
要求
- 所有人的要求
- 脚本版的要求
- WSH (Windows 脚本宿主)
- Internet Explorer 6.0+
目标
许多用户使用 TortoiseSVN (一个适用于 Windows 的 Subversion 客户端) 来控制源代码,并使用 .dan.g.'s ToDoList 来管理问题和 bug。
如果用户使用 Web 应用程序 bug/issue 跟踪器,SVN 可以在项目的属性中设置其 URL。然后用户就可以在日志窗口中单击 bug/issue ID 来打开 bug/issue 页面。
但是如何与 Windows 应用程序 ToDoList
做到这一点呢?
我们必须实现一个 URL 协议来调用 ToDoList.exe。有两种方法
- 让应用程序实现一个真实的 URL 协议
- 在 Windows 注册表中注册一个伪协议
本文遵循第二种方法。

应用程序版和脚本版的区别
App Edition | 脚本版 | |
URL Pattern | tdl:filename?tid tdl:/filename?tid tdl://filename?tid tdl:///filename?tid |
tdl:///filename?tid |
要求 | WSH Internet Explorer 6.0+ |
|
用户界面 | Windows Form | HTML Page |
Configuration Storage | Registry or INI | Only INI |
引言
该程序通过写入注册表来在 Windows 中注册一个名为 TDL 的伪协议。注册项如下(导出*.reg文件的内容)
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\tdl]
@="\"URL: ToDoList protocol\""
"URL Protocol"=""
[HKEY_CLASSES_ROOT\tdl\shell]
[HKEY_CLASSES_ROOT\tdl\shell\open]
[HKEY_CLASSES_ROOT\tdl\shell\open\command]
@="wscript \"C:\\Program Files\\TodoList\\Tdl\\todolist.wsf\" \"%1\""
注册后,用户可以在 Internet Explorer 的地址栏或运行对话框(开始菜单 -> 运行,或 [Win]+[R])中运行 URL tdl:///blabla,Windows 应该会使用该 URL 作为第一个参数来调用已注册的命令。例如
如果你运行 URL
tdl:///C:\My%20Documents\todo.tdl?10
然后系统会调用
wscript C:\\Program Files\\TodoList\\Tdl\\todolist.wsf
"tdl:///C:\My%20Documents\todo.tdl?10"
因此,将一个名为todolist.wsf的 WSH 脚本放在C:\Program Files\TodoList\Tdl目录中应该是可以的。
Application Source Code
该应用程序是用 Turbo C++ Explorer 和 VCL 构建的。
有一个名为HyperlinkWrapper
的类。该类用于从TLabel
对象创建超链接。
HyperlinkWrapper
在鼠标进入或离开时接管一个标签并设置其样式。
TIniFile
和TRegistry
类用于读取/存储配置。
WScript Components
tdl:///C:\My%20Documents\todo.tdl?10
是传递给todolist.wsf的第一个参数。WScript.Arguments
对象可以获取它
var url = WScript.Arguments(0)
解析 URL 后,WshShell
对象可以运行todolist
,并将filename
和tid
作为参数。
var commandLine = ...
var wshShell = WScript.CreateObject("WScript.Shell");
// or
// var wshShell = new ActiveXObject("WScript.Shell");
wshShell.Run(commandLine);
FileSystemObject Components
脚本可以从参数中获取filename
和tid
。如何获取todolist.exe的路径?编写一个配置文件是个好方法。所以应该使用FileSystemObject
来读取/写入配置文件。
var fso = new ActiveXObject("Scripting.FileSystemObject");
读取
var ts = fso.OpenTextFile("tdl.ini");
var line;
while (!ts.AtEndOfStream) {
line = ts.ReadLine();
if (parseLineToGetExecutable()) break;
}
ts.Close();
Write
var ts = fso.CreateTextFile("tdl.ini", true);
ts.WriteLine("todolist=" + executable);
ts.Close();
我们需要一个友好的用户界面。HTML 页面是一个不错的选择,因为 JavaScript 也可以在网页浏览器中运行。编写 HTML 页面时,请注意 WSH 脚本和 HTML 中的脚本之间存在一些差异。
WSH 脚本和 HTML 中脚本的差异
WSH 脚本可以使用名为WScript
的默认对象,但在 HTML 中该对象不存在。
如果你想在 WSH 中做一些事情,可以这样写代码
// create WshShell object
var wshShell = WScript.CreateObject("WScript.Shell");
// popup a message box
WScript.Echo("message");
// get the full filename of the running script
var filename = WScript.ScriptFullName
但在 HTML 中,你必须写
// create WshShell object
var wshShell = new ActiveXObject("WScript.Shell");
// popup a message box
alert("message");
// get the URL of current HTML page in which the script is
var filename = window.location.href
TDL 应用程序版历史记录
- Beta1
- 可以将配置保存在注册表或 INI 文件中
- 可以解析 URL 中的 tdl:///..., tdl://..., tdl:/... 和 tdl:... ;
TDL 脚本版历史记录
- Beta2
- 添加了关于手动安装、卸载和配置的说明
- 添加了一个*.reg文件模板,使注册 TDL 协议变得容易
- 修复了一些拼写错误
- Beta1
- 使tdl:///... 能够打开 todolist
- 支持通过脚本进行安装、卸载和配置
ToDoList 的 tdl:// 协议设置
.dan.g's ToDoList 从 5.2 版本开始支持tdl:// url 协议。如果你想启用tdl:// url 协议,只需在 ToDoList 的偏好设置中勾选一个选项即可。下面的截图向你展示了如何启用 ToDoList 的tdl:// url 协议。