activeX控件怎么样去跟程序通讯?
类似QQ点击网页上的按钮就能弹出即时通讯对话框是怎么实现的?

解决方案 »

  1.   

    在C#中和ActiveX控件对应的是Windows控件库(User Controls)。 
        在IE中激活Windows Forms控件可以分五步来完成: 
        * 创建Windows Forms控件; 
        * 创建一个包含对象标签的HTML文档; 
        * 创建虚拟目录,复制并设置权限; 
        * 配置代码访问权限; 
        * 运行该控件。 
        1. Windows Forms控件:SimpleControl.dll 
        几乎所有的Windows Forms控件都可以用,但在这个例子里,我们使用的是包含在.NET Framework SDK QuickStart Tutorial Creating Controls中的SimpleControl控件。 
        2. HTML文档: SimpleControl.html 
        接下来一步是生成内有一个对象tag的HTML文档,以激活Windows Forms控件。此外,还要加入一些脚本和输入tag(input tags)到该控件的示范程序入口。 
        <object id="simpleControl1" 
         classid="http:SimpleControl.dll#Microsoft.Samples.WinForms.Cs.SimpleControl.SimpleControl" 
         height="300" 
         width="300"> 
         <param name="Text" value="Simple Control"> 
        </object> 
         
        对象tag: 
        classid包含两个有趣的部分:导向控件库的路径和全名(fully qualified name),中间用“#”隔开。如果您熟悉ActiveX对象tag的话,您会发现我们没有使用GUID。在Windows 表单中,路径和全名(fully qualified name)合并在一起的整体被用来当作唯一的识别符。 
        参数tag被用来设置控件的属性:“name”参数是属性名,而“value”参数则是属性的值。 
        脚本: 
        <script> 
        function ChangeText() { 
         simpleControl1.Text = text1.value; 
        } 
         
        </script> 
         
        -------------------------------------------------------------------------------- 
        <input type="text" id="text1"> 
        <input type="button" value="Change Text" onclick="ChangeText()"> 
         
        您可以写一个脚本来获得控件的程序入口,页面上的按钮和文本框已关联到一个简单的函数ChangeText,以设置该控件的text属性。为了是修改的结果体现出来,控件必须重绘(调用invalidated()实现)。 
        完整代码 
        下面是这个例子完整的HTML代码: 
        <html> 
         
        <script> 
         
        function ChangeText() { 
         simpleControl1.Text = text1.value; 
        } 
         
        </script> 
         
        <body> 
         
         <p>Simple Control</p> 
         <br> 
         <br> 
         
         <object id="simpleControl1" 
         classid="http:SimpleControl.dll#Microsoft.Samples.WinForms.Cs.SimpleControl.SimpleControl" 
         height="300" 
         width="300"> 
         <param name="Text" value="Simple Control"> 
         </object> 
         
         <br> 
         <br> 
         
         <input type="text" id="text1"> 
         <input type="button" value="Change Text" onclick="ChangeText()"> 
         
        </body> 
         
        </html> 
        3. 虚拟目录: 
        创建一个新的虚拟目录,并将控件(SimpleControl.dll)和HTML文档(SimpleControl.html)放到这个目录里。 
        注意:将该虚拟目录的执行权限设置为“脚本”,如果将执行权限设置为“脚本& 执行”的话,控件将不能正常激活。 
        4 配置代码访问权限 
        如果你是在intranet运行这个例子,并且没有改变.Net Framework的安全策略,这个例子可以正确运行了。如果你改变了安全策略,或者你打算从Internet网站运行,你需要配置Internet Explorer或者改变安全策略。一个办法将控件运行和下载的页面加入信任域。可以在Internet Explorer使用以下步骤完成: 
        1. 选择“工具|选项” 
        2. 选择"安全"项 
        3. 选择"受信任的站点" 
        4. 点击“站点”按钮。 
        5. 添加你的站点 
        6. 点击“确定” 
         
        你也可以配置.net framework安全策略。SDK文档中包括了如何配置安全策略的内容。 
        5. 运行控件: 
        用IE浏览器里指明虚拟目录和SimpleControl.html文件,即运行该控件。如果控件没有被正常激活,则可能需要重启一下IE或清空assembly下载缓存(assembly download cache)。 
        注意: 您可以使用gacutil /ldl查看您的assembly下载缓存的内容。可以使用gacutil /cdl清除缓存内容。 
        建议参考文章Using Windows Forms Controls in Internet Explorer(http://windowsforms.net/articles/iesourcing.aspx)。
      

  2.   

    ActiveX 是运行在客户端的,如果要和服务器端通信需要用socket,或者用webservice等...
      

  3.   

    用C#肯定是不实际。。
    用一楼所说的方法我已经试过,在客户机根本无法用(需要装.NET SDK包)回:hdt(倦怠)目的就是希望能运行在客户端。我个人的想法是:
       用VC++ 写一个MFC ACTIVEX 控件,放在web上,然后通过FindWindow和SendMessage给C#客户端程序发送windows消息,然后C#客户端通过重写DefWndProc方法来处理自定义消息。
       遇到的问题是:我不知道在VC++上如何找到我特定程序的句柄,以及发送消息过去。而且据我所知C++的消息和C#接收的消息系列化好像有点问题,也就是说我在C++定义好的消息主体,发送到我C#程序的话有问题。。
       有那位大侠,写过这种程序的?救命。。
      

  4.   

    qq的是bho
    msdn 搜索 winband
      

  5.   

    用vb和c++写ocx?能不能说详细一点?