如何从我的Delphi应用程序调用IDM(Internet下载管理器)
IDM为客户端应用程序提供了一些API:如何从我的Delphi应用程序调用IDM(Internet下载管理器),delphi,com,download-manager,Delphi,Com,Download Manager,IDM为客户端应用程序提供了一些API: 如何通过Delphi实现这一点?好的。假设我们安装了IDM 似乎IDManTypeInfo.tlb库不包含有关IDM库的数据类型的信息。 在这种情况下,使用此库的唯一方法是将C++头文件重写为Delphi: unit IDMan; interface uses windows, ActiveX; const CLSID_CIDMLinkTransmitter : TGUID = '{AC746233-E9D3-49CD-862F-068F7B
如何通过Delphi实现这一点?好的。假设我们安装了IDM 似乎IDManTypeInfo.tlb库不包含有关IDM库的数据类型的信息。 在这种情况下,使用此库的唯一方法是将C++头文件重写为Delphi:
unit IDMan;
interface
uses windows, ActiveX;
const
CLSID_CIDMLinkTransmitter : TGUID = '{AC746233-E9D3-49CD-862F-068F7B7CCCA4}';
IID_ICIDMLinkTransmitter : TGUID = '{4BD46AAE-C51F-4BF7-8BC0-2E86E33D1873}';
IID_ICIDMLinkTransmitter2 : TGUID = '{94D09862-1875-4FC9-B434-91CF25C840A1}';
type
ICIDMLinkTransmitter = interface(IInterface)
['{4BD46AAE-C51F-4BF7-8BC0-2E86E33D1873}']
function SendLinkToIDM(
Url : WideString;
Referer : WideString;
Cookies : WideString;
Data: WideString;
User: WideString;
Password: WideString;
LocalPath: WideString;
LocalFileName: WideString;
Flags : longint):HRESULT; stdcall;
end;
ICIDMLinkTransmitter2 = interface(ICIDMLinkTransmitter)
['{94D09862-1875-4FC9-B434-91CF25C840A1}']
function SendLinkToIDM2(
Url : WideString;
Referer: WideString;
Cookies: WideString;
Data: WideString;
User: WideString;
Password: WideString;
LocalPath: WideString;
LocalFileName: WideString;
Flags : longint;
reserved1 : Variant;
reserved2 :Variant): HResult; stdcall;
function SendLinksArray(
location : WideString;
LinksArray : PSafeArray):HResult; stdcall;
end;
implementation
end.
将此单元添加到项目中,并尝试使用下一个代码:
uses IDMan, ComObj;
....
procedure TMainForm.TestIDM();
var lt : ICIDMLinkTransmitter;
begin
lt := CreateComObject(CLSID_CIDMLinkTransmitter) as ICIDMLinkTransmitter;
lt.SendLinkToIDM('http://www.internetdownloadmanager.com/trans_kit.zip', 'teran.karelia.pro','','','','','','', 0);
end;
我没有安装IDM,所以我没有检查此代码。我不确定它是否100%正确,但试试看。好的。假设我们安装了IDM
uses ShellAPI,Registry;
function GetProgramFilesDir: string;
begin
with TRegistry.Create do begin
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion');
Result := ReadString('ProgramFilesDir');
finally
Free;
end;
end;
end;
var url:string;
begin
url:='http:\\yourfile';
if FileExists(GetProgramFilesDir+'\Internet Download Manager\IDMan.exe') then
ShellExecute(Handle, 'open',pchar('"'+GetProgramFilesDir+'\Internet Download Manager\IDMan.exe"'),PChar(' /d "'+url+'"'),nil, 1) else
ShellExecute(Handle, 'open',nil,PChar(url),nil, 1) ; //1=show --
end;
似乎IDManTypeInfo.tlb库不包含有关IDM库的数据类型的信息。
在这种情况下,使用此库的唯一方法是将C++头文件重写为Delphi:
unit IDMan;
interface
uses windows, ActiveX;
const
CLSID_CIDMLinkTransmitter : TGUID = '{AC746233-E9D3-49CD-862F-068F7B7CCCA4}';
IID_ICIDMLinkTransmitter : TGUID = '{4BD46AAE-C51F-4BF7-8BC0-2E86E33D1873}';
IID_ICIDMLinkTransmitter2 : TGUID = '{94D09862-1875-4FC9-B434-91CF25C840A1}';
type
ICIDMLinkTransmitter = interface(IInterface)
['{4BD46AAE-C51F-4BF7-8BC0-2E86E33D1873}']
function SendLinkToIDM(
Url : WideString;
Referer : WideString;
Cookies : WideString;
Data: WideString;
User: WideString;
Password: WideString;
LocalPath: WideString;
LocalFileName: WideString;
Flags : longint):HRESULT; stdcall;
end;
ICIDMLinkTransmitter2 = interface(ICIDMLinkTransmitter)
['{94D09862-1875-4FC9-B434-91CF25C840A1}']
function SendLinkToIDM2(
Url : WideString;
Referer: WideString;
Cookies: WideString;
Data: WideString;
User: WideString;
Password: WideString;
LocalPath: WideString;
LocalFileName: WideString;
Flags : longint;
reserved1 : Variant;
reserved2 :Variant): HResult; stdcall;
function SendLinksArray(
location : WideString;
LinksArray : PSafeArray):HResult; stdcall;
end;
implementation
end.
将此单元添加到项目中,并尝试使用下一个代码:
uses IDMan, ComObj;
....
procedure TMainForm.TestIDM();
var lt : ICIDMLinkTransmitter;
begin
lt := CreateComObject(CLSID_CIDMLinkTransmitter) as ICIDMLinkTransmitter;
lt.SendLinkToIDM('http://www.internetdownloadmanager.com/trans_kit.zip', 'teran.karelia.pro','','','','','','', 0);
end;
我没有安装IDM,所以我没有检查此代码。我不确定它是否100%正确,但请尝试一下
uses ShellAPI,Registry;
function GetProgramFilesDir: string;
begin
with TRegistry.Create do begin
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKeyReadOnly('SOFTWARE\Microsoft\Windows\CurrentVersion');
Result := ReadString('ProgramFilesDir');
finally
Free;
end;
end;
end;
var url:string;
begin
url:='http:\\yourfile';
if FileExists(GetProgramFilesDir+'\Internet Download Manager\IDMan.exe') then
ShellExecute(Handle, 'open',pchar('"'+GetProgramFilesDir+'\Internet Download Manager\IDMan.exe"'),PChar(' /d "'+url+'"'),nil, 1) else
ShellExecute(Handle, 'open',nil,PChar(url),nil, 1) ; //1=show --
end;
工作100%
100%工作这是一个COM对象。你的问题是关于如何使用COM?简而言之:您必须下载库,使用regsvr32将其注册为COM库,然后在Delphi中导入IDManTypeInfo.tlb,并将导入的.pas文件添加到您的应用程序中。它是一个COM对象。你的问题是关于如何使用COM?简而言之:您必须下载库,使用regsvr32将其注册为COM库,然后在Delphi中导入IDManTypeInfo.tlb,并将导入的.pas文件添加到您的应用程序中。