是否可以在电子邮件正文中制作一个 link 来启动我安装在本地计算机上的 Delphi 应用程序?
Is it possible in the body of an email to make a link that will launch my Delphi app installed in the local computer?
我正在寻找一种方法来改进不同工具之间的导航(在 windows 下)。我想在电子邮件正文中添加一个特殊的“link”,当用户单击它时将启动我安装在他本地计算机上的 delphi 应用程序。可以吗?如果可以怎么办?
是的,这是可能的。您的应用程序必须创建一个名字对象(例如,从其设置或首次启动)。这将允许邮件客户端打开指向您的应用程序的 URL,Windows 将启动它并将 URL 传递给它。
这是 register/unregister URL 协议的一些源代码:
function RegisterURLProtocol(
const ProtocolID : String;
const ProtocolName : String;
const DefaultIcon : String;
const OpenCommand : String) : Boolean;
var
Reg : TRegistry;
begin
Result := FALSE;
Reg := TRegistry.Create(KEY_WRITE);
try
Reg.RootKey := HKEY_CLASSES_ROOT;
if not Reg.OpenKey(ProtocolID, TRUE) then
Exit;
Reg.WriteString('', 'URL:' + ProtocolName);
Reg.WriteString('URL Protocol', '');
if Reg.OpenKey('DefaultIcon', True) then begin
Reg.WriteString('', DefaultIcon);
end;
Reg.CloseKey;
if not Reg.OpenKey(ProtocolID + '\shell\open\command', True) then
Exit;
Reg.WriteString('', OpenCommand);
Result := TRUE;
finally
FreeAndNil(Reg);
end;
end;
function UnregisterURLProtocol(
const ProtocolID : String) : Boolean;
var
Reg : TRegistry;
begin
Result := FALSE;
Reg := TRegistry.Create(KEY_WRITE);
try
Reg.RootKey := HKEY_CLASSES_ROOT;
if not Reg.KeyExists(ProtocolID) then
Exit;
Reg.DeleteKey(ProtocolID + '\DefaultIcon');
Reg.DeleteKey(ProtocolID + '\shell\open\command');
Reg.DeleteKey(ProtocolID + '\shell\open');
Reg.DeleteKey(ProtocolID + '\shell');
Reg.DeleteKey(ProtocolID);
Result := TRUE;
finally
FreeAndNil(Reg);
end;
end;
ProtocolID
是您的协议的标识符。您可以使用 'MyApp'
之类的东西。如果您必须注册 HTTP 协议,您将使用“http'
”。当用户单击 link 时,应用程序将由 Windows 打开。应用程序将接收 OpenCommand 指定的内容(您指定的字符串)。您可以在该 OpenCommand 中包含 %1,它将被 URL 替换,协议除外。
ProtocolName
是描述您的协议的字符串。
放在邮件中的URL是这样的:
MyApp://SomeParameters/SomeMoreParameters
我正在寻找一种方法来改进不同工具之间的导航(在 windows 下)。我想在电子邮件正文中添加一个特殊的“link”,当用户单击它时将启动我安装在他本地计算机上的 delphi 应用程序。可以吗?如果可以怎么办?
是的,这是可能的。您的应用程序必须创建一个名字对象(例如,从其设置或首次启动)。这将允许邮件客户端打开指向您的应用程序的 URL,Windows 将启动它并将 URL 传递给它。
这是 register/unregister URL 协议的一些源代码:
function RegisterURLProtocol(
const ProtocolID : String;
const ProtocolName : String;
const DefaultIcon : String;
const OpenCommand : String) : Boolean;
var
Reg : TRegistry;
begin
Result := FALSE;
Reg := TRegistry.Create(KEY_WRITE);
try
Reg.RootKey := HKEY_CLASSES_ROOT;
if not Reg.OpenKey(ProtocolID, TRUE) then
Exit;
Reg.WriteString('', 'URL:' + ProtocolName);
Reg.WriteString('URL Protocol', '');
if Reg.OpenKey('DefaultIcon', True) then begin
Reg.WriteString('', DefaultIcon);
end;
Reg.CloseKey;
if not Reg.OpenKey(ProtocolID + '\shell\open\command', True) then
Exit;
Reg.WriteString('', OpenCommand);
Result := TRUE;
finally
FreeAndNil(Reg);
end;
end;
function UnregisterURLProtocol(
const ProtocolID : String) : Boolean;
var
Reg : TRegistry;
begin
Result := FALSE;
Reg := TRegistry.Create(KEY_WRITE);
try
Reg.RootKey := HKEY_CLASSES_ROOT;
if not Reg.KeyExists(ProtocolID) then
Exit;
Reg.DeleteKey(ProtocolID + '\DefaultIcon');
Reg.DeleteKey(ProtocolID + '\shell\open\command');
Reg.DeleteKey(ProtocolID + '\shell\open');
Reg.DeleteKey(ProtocolID + '\shell');
Reg.DeleteKey(ProtocolID);
Result := TRUE;
finally
FreeAndNil(Reg);
end;
end;
ProtocolID
是您的协议的标识符。您可以使用 'MyApp'
之类的东西。如果您必须注册 HTTP 协议,您将使用“http'
”。当用户单击 link 时,应用程序将由 Windows 打开。应用程序将接收 OpenCommand 指定的内容(您指定的字符串)。您可以在该 OpenCommand 中包含 %1,它将被 URL 替换,协议除外。
ProtocolName
是描述您的协议的字符串。
放在邮件中的URL是这样的:
MyApp://SomeParameters/SomeMoreParameters