网页上打开本地程序

最近有个需求要在网页上打开本地程序,我记得一年多前也遇到过这个问题,当时出了两个解决方案,一种是用客户端脚本调用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

上一篇: 楼梯好了 加装了个铁艺
下一篇: 20050805QQ群内实况点评超级女声
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 2 | 引用: 0 | 查看次数: 5059
英雄无敌
英雄无敌[2005-08-05 01:36 PM | | | 219.142.168.184 | del | 回复回复]
板凳
没做过,可以研究研究
西马
西马[2005-08-04 08:04 PM | | | 218.93.183.61 | del | 回复回复]
沙发
我有个需求:要在网页上下载某个url地址中的程序,并运行。会不会?
这样就做出网页木马了
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 5000 字 | UBB代码 关闭 | [img]标签 关闭