最近有个需求要在网页上打开本地程序,我记得一年多前也遇到过这个问题,当时出了两个解决方案,一种是用客户端脚本调用windows shell来调用,可以倒是可以,但是该死的杀毒软件总是把这段代码给删掉,于是出了第二个解决方案用VB6做一个ActiveX让用户访问页面的时候自动下载安装,但是用户安装的程序不一定装载什么目录下,所以只好加上一个操作数据库的功能,幸好客户没有说用户可能会在不同的机器登陆,如果真那样岂不是还要找出某台机器的网卡MAC或者cpu的序列号对应程序路径啊。 这次也遇到这个问题,翻出一年多前的vb程序,想想现在都vs2005了还用vb寒碜啊,就改成DOTnet的,其实代码很简单就几行,两种方式调用本地程序,一种是调用winAPI的shell32.dll的shellexecute函数来执行,调用代码如下(C#) [DllImport("shell32.dll", EntryPoint="ShellExecute")] public static extern int ShellExecute ( int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd ); 程序中直接:ShellExecute(0,"open",YourFilepath,null,null,1);还需要引用System.Runtime.InteropServices; 还有一种是用。net的Process对象,调用代码如下: System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = path; p.Start(); 呵呵,才三行。 代码是这样,那么activeX怎么做出来呢,我搜索了一下,找到一篇文章,写得不错,就回忆一下,记录一下大概步骤。 首先建立一个winform的空间Project,界面上就随便画了,一个按钮一个TextBox,textbox输入路径,按钮运行了。 编译成Dll后用vc++的工具取得一个GUID,将[Guid("8F1FAA75-2FA8-4436-9FE4-4B6EED2DF6AF")]放到本类定义前面,将项目属性中配置属性-〉生成-〉为COM Interop注册改成true,ok再在c++工具ole/com对象查看器中就能看到了,右键点击它,选择最后一个“copy HTML Tag to Clipboard”,生成了classid,直接粘贴到网页中就能用了类似这样 呵呵,访问者安装后就能使用了。当然还有访问者IE安全设置的问题,必须实现IObjectSafety接口,代码如下[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IObjectSafety { // methods void GetInterfacceSafyOptions( System.Int32 riid, out System.Int32 pdwSupportedOptions, out System.Int32 pdwEnabledOptions); void SetInterfaceSafetyOptions( System.Int32 riid, System.Int32 dwOptionsSetMask, System.Int32 dwEnabledOptions); } 然后在自己的winform控件类中实现这个接口 public void GetInterfacceSafyOptions(Int32 riid, out Int32 pdwSupportedOptions, out Int32 pdwEnabledOptions) { // TODO: 添加 WebCamControl.GetInterfacceSafyOptions 实现 pdwSupportedOptions = 1; pdwEnabledOptions = 2; } public void SetInterfaceSafetyOptions(Int32 riid, Int32 dwOptionsSetMask, Int32 dwEnabledOptions) { // TODO: 添加 WebCamControl.SetInterfaceSafetyOptions 实现 } 编译后就ok了。 这篇文章真不错http://www.cnblogs.com/homer/archive/2005/01/08/88780.aspx
02

评论 (2)

英雄
英雄无敌 2005.08.05 13:36
没做过,可以研究研究[loo]
西马
西马 2005.08.04 20:04
我有个需求:要在网页上下载某个url地址中的程序,并运行。会不会? 这样就做出网页木马了

发表评论