65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.43/5 (3投票s)

2007年2月3日

CPOL

3分钟阅读

viewsIcon

57792

downloadIcon

562

注册一个 TDL: 的伪协议,使 tdl:///filename.tdl?tid 可用

应用程序版

脚本版

要求

目标

许多用户使用 TortoiseSVN (一个适用于 Windows 的 Subversion 客户端) 来控制源代码,并使用 .dan.g.'s ToDoList 来管理问题和 bug。

如果用户使用 Web 应用程序 bug/issue 跟踪器,SVN 可以在项目的属性中设置其 URL。然后用户就可以在日志窗口中单击 bug/issue ID 来打开 bug/issue 页面。

但是如何与 Windows 应用程序 ToDoList 做到这一点呢?

我们必须实现一个 URL 协议来调用 ToDoList.exe。有两种方法

  1. 让应用程序实现一个真实的 URL 协议
  2. 在 Windows 注册表中注册一个伪协议

本文遵循第二种方法。

Sample image
应用程序版截图。

Sample image

脚本版截图。

应用程序版和脚本版的区别

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在鼠标进入或离开时接管一个标签并设置其样式。

TIniFileTRegistry类用于读取/存储配置。

WScript Components

tdl:///C:\My%20Documents\todo.tdl?10 是传递给todolist.wsf的第一个参数。WScript.Arguments对象可以获取它

var url = WScript.Arguments(0)

解析 URL 后,WshShell对象可以运行todolist,并将filenametid作为参数。

var commandLine = ...
var wshShell = WScript.CreateObject("WScript.Shell");
// or
// var wshShell = new ActiveXObject("WScript.Shell");
wshShell.Run(commandLine);

FileSystemObject Components

脚本可以从参数中获取filenametid。如何获取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 协议。

tdl_config.png

链接

© . All rights reserved.