点击网页,执行delphi代码 本帖最后由 fym_wlll 于 2009-06-28 13:18:31 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 COM+ 技术好像就可以吧! 在注册表登记自己程序的“协议”,如:myapp://就是执行一个prj1.execonst FPath='\htapp'; sset='设置'; sdo='“网页自动运行”';Var Reg : TRegistry; Reg := TRegistry.Create; try Reg.RootKey := HKEY_CLASSES_ROOT ; try If Reg.OpenKey(FPath, False) then reg.DeleteKey(FPath); Reg.OpenKey(FPath,true); reg.WriteString('','htapp 自定义协议'); reg.WriteString('URL Protocol','"'+htdebug.getcurfile('.exe')+'"' ); Reg.OpenKey(FPath+'\DefaultIcon',true); reg.WriteString('','"'+htdebug.getcurfile('.exe')+'",0' ); reg.OpenKey(FPath+'\shell\open\command',true); reg.WriteString('','"'+htdebug.getcurfile('.exe')+'" "%1"' ); unitdialog.OKbox(sset+sdo+'成功!','',sender=nil); except on e:exception do unitdialog.Badbox(sset+sdo+'失败!'+ln+ '因为:'+e.Message,'',sender=nil); end; finally Reg.Free; end; 谢谢楼上两位.网上有一个文章《通过网页链接打开应用程序客户端的两种实现方式》网址是:http://blog.csdn.net/insidekernel/archive/2008/01/10/2033175.aspx估计就是楼上讲述的方法。又比如:[通过网页链接能够打开我们的IM软件][点击链接mailto:[email protected],可以打开outlook程序]另外还有文章:http://www.cnblogs.com/CharlieSong/archive/2009/04/04/1429464.html也讲到了:在网页中点一个链接,启动我们自己的一个客户端程序,并接受链接传递过来的参数,但上述都是启动一个应用程序,如何启动一个窗体? gui程序就是由窗体组成的。你是说启动程序并激活对应的功能窗体?可以由myapp://xxxx?yyyy里的yyyy告诉程序激活哪个的功能窗体程序可以从命令行参数得到yyyy 用COM可以实现,程序监听该网页的单击事件 如果webbrowser是嵌入在自己的DELPHI程序里的话,简单的办法就是在网页的链接上加上自定义的各种参数比如扫描木马的链接定义为:http://SAOMIAOMUMADelphi在Webbrowser的OnBeforeNavigate2事件中可以根据URL来判断执行哪些操作比如:procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);begin if Pos('SAOMIAOMUMA', Url) > 0 then begin // 写你要执行的代码 Cancel := True; // 停止转向http://SAOMIAOMUMA end;end; 可以注册协议,也可以写一个ActiveX QQ,迅雷,360安全卫士这些软件都在内部嵌入的webbrowser控件:例1:QQ的http://wallet.tenpay.com/wallet/frame.html例2:360安全卫士的帮助中心 本问题,说白了就是在应用程序中嵌入WebBrowser控件,在WebBrowser控件里显示网页代码,http://www.microsoft.com/mind/0798/webbrowfigs.htm#fig1 activex虽然号称已经过时了,但是写起来比com+要简单,你可以把自己的整个form都放进去,我以前就做过activex的例子,唯一美中不足的就是需要客户端下载自己的activex插件,而且有些浏览器禁用activex或者不能正常显示还要自己分析原因,最后不得不做了一个调整浏览器安全级别的程序发下去 我有完美的解决方案,不用协议,不用com,不用activex,直接代码实现,就是不知道楼主给多少分? 统一更新字段长度,类型 报表中计算字段的问题? infopower3组件包问题 用clientDataset.LoadFromStream(x);读如数据,在DBGrid中也能显示,就是不能保存到数据库中?????? Double类型转换成string的函数是什么? 急,急delphi listbox1 连接数据库问题? 如何改变窗体Tab键的顺序 D7+RO6+DATASNAP+DBX为什么用POOLING模式时关闭服务端出错 连接数据库出错问题 怎样将第三方控件打包? WebBrowser读取网页脚本中的变量 FAST REPORT 分组报表 补空行 在线等
FPath='\htapp';
sset='设置';
sdo='“网页自动运行”';
Var
Reg : TRegistry;
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT ; try
If Reg.OpenKey(FPath, False) then
reg.DeleteKey(FPath);
Reg.OpenKey(FPath,true);
reg.WriteString('','htapp 自定义协议');
reg.WriteString('URL Protocol','"'+htdebug.getcurfile('.exe')+'"' );
Reg.OpenKey(FPath+'\DefaultIcon',true);
reg.WriteString('','"'+htdebug.getcurfile('.exe')+'",0' );
reg.OpenKey(FPath+'\shell\open\command',true);
reg.WriteString('','"'+htdebug.getcurfile('.exe')+'" "%1"' );
unitdialog.OKbox(sset+sdo+'成功!','',sender=nil);
except on e:exception do
unitdialog.Badbox(sset+sdo+'失败!'+ln+
'因为:'+e.Message,'',sender=nil);
end; finally
Reg.Free;
end;
http://blog.csdn.net/insidekernel/archive/2008/01/10/2033175.aspx
估计就是楼上讲述的方法。又比如:
[通过网页链接能够打开我们的IM软件]
[点击链接mailto:[email protected],可以打开outlook程序]另外还有文章:
http://www.cnblogs.com/CharlieSong/archive/2009/04/04/1429464.html
也讲到了:在网页中点一个链接,启动我们自己的一个客户端程序,并接受链接传递过来的参数,
但上述都是启动一个应用程序,如何启动一个窗体?
可以由myapp://xxxx?yyyy里的yyyy告诉程序激活哪个的功能窗体
程序可以从命令行参数得到yyyy
比如扫描木马的链接定义为:http://SAOMIAOMUMA
Delphi在Webbrowser的OnBeforeNavigate2事件中可以根据URL来判断执行哪些操作
比如:procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
if Pos('SAOMIAOMUMA', Url) > 0 then
begin
// 写你要执行的代码
Cancel := True; // 停止转向http://SAOMIAOMUMA
end;
end;
这些软件都在内部嵌入的webbrowser控件:
例1:
QQ的http://wallet.tenpay.com/wallet/frame.html例2:
360安全卫士的帮助中心