在silverlight中打开调用外部程序的几种方式

简介: 原文 http://www.cnblogs.com/subway-2008/archive/2010/08/15/1799949.html 在silverlight中调用外部程序的几种方法总结如下: 1.silverlight不支持oob模式的时候,silverlight调外部应用程序只能通过activex来实现。

原文 http://www.cnblogs.com/subway-2008/archive/2010/08/15/1799949.html

在silverlight中调用外部程序的几种方法总结如下:

1.silverlight不支持oob模式的时候,silverlight调外部应用程序只能通过activex来实现。

   大致方法如下,之前写的一个:

       var idropItems;
        var clsid;
        var plugin;
        var currentDivIndex;
        jQuery(document).ready(function() {
            idropItems = window.parent.GetIDropItems();
            if (idropItems.length > 0) {

                BuildDivContainer();

                //activex的clsid,

                clsid = "clsid:21E0CB95-1198-4945-A3D2-4BF804295F78";
                $("#Pagination").pagination(idropItems.length, {
                    num_edge_entries: 2,
                    num_display_entries: 8,
                    items_per_page: 8,
                    next_text: "",
                    prev_text: "",
                    callback: pageselectCallback
                });
            }
        });
        function pageselectCallback(page_id, jq) {
            BuildIDropItems(page_id);
        }

   function BuildIDropItems(pageIndex) {

            $("#c_" + currentDivIndex).hide();
            if ($("#c_" + pageIndex).attr("loaded") == "0") {
                var itemIndex = pageIndex * 8;
                var html = "";
                for (var i = itemIndex; i < itemIndex + 8; i++) {
                    if (i < idropItems.length) {
                        if (idropItems[i].ObjectType == '2') {
                            var objectName = GetSubstring(idropItems[i].ObjectName.substring(0, idropItems[i].ObjectName.lastIndexOf('.')), 13);
                            var ext = idropItems[i].ObjectName.substring(idropItems[i].ObjectName.lastIndexOf('.') + 1).toLowerCase();
                                                         html += "<div class='ItemBox'>";
                                html += "<object classid='" + clsid + "' width='101' height='101' >";
                                html += "<param name='background' value=''>";
                                html += "<param name='proxyrect' value='0, 0, 101, 101'>";
                                html += "<param name='griprect' value='0, 0, 101, 101'>";
                                html += "<param name='package'  value='GetIDropItem.aspx?guid=" + idropItems[i].ObjectId + "&type=xml'>";
                                html += "<param name='validate' value='1'>";
                                html += "<img src='GetIDropItemguid=" + idropItems[i].ObjectId + ".img' title= />";
                                html += "</object>";
                                html += "<span class='ItemName'>" + objectName + "</span>";
                                html += "</div>";                                      

                        }
                    }
                }
                $("#c_" + pageIndex).html(html).attr("loaded", "1");
            }
            $("#c_" + pageIndex).show();
            currentDivIndex = pageIndex;
        }

2.在silverlight4里面,可以在oob模式下可以直接调com组件,如下面代码段:就是通过AutomationFactory调用dt930的com组件
      if (Application.Current.InstallState != InstallState.Installed)
          Application.Current.Install();

      //oob模式,需要提升权限
      if (Application.Current.HasElevatedPermissions && System.Windows.Interop.ComAutomationFactory.IsAvailable)
       {

          ///AutomationFactory call com componnnet          
            dynamic dt = AutomationFactory.CreateObject("DT390COM.DT390");

      }
需引用下面的命名空间

using System.Dynamic;

using System.Windows.Interop;
using System.Runtime.InteropServices.Automation;

3.上面2种方法都要求调用的外部程序是com组件,如果不是com组件,又该如何去启动外部程序呢.通过使用WScript.Shell 组件可以打开任何的应用程序

  eg  using (dynamic shell = AutomationFactory.CreateObject("WScript.Shell"))
         {
                shell.Run(@"C:\windows\notepad.exe"); //you can open anything
               shell.SendKeys(txtTextToSend.Text);
               
          }

  除此之外还可以在js中调用

      <javascript language="javascipt">{

       var shell = new ActiveXObject("WScript.shell");

       shell.Run(@"C:\windows\notepad.exe");

    }

目录
相关文章
|
C# Windows
WPF 获取程序路径的一些方法,根据程序路径获取程序集信息
原文:WPF 获取程序路径的一些方法,根据程序路径获取程序集信息 一、WPF 获取程序路径的一些方法方式一 应用程序域 //获取基目录即当前工作目录 string str_1 = System.
1728 0
|
2月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
53 0
Windows编程基础,第一个Windows程序,注册窗口,创建窗口(下)
Windows编程基础,第一个Windows程序,注册窗口,创建窗口
|
编译器 API 开发工具
Windows编程基础,第一个Windows程序,注册窗口,创建窗口(上)
Windows编程基础,第一个Windows程序,注册窗口,创建窗口
|
JavaScript API Windows
一个操作windows窗口的类“clsWindow”,使用非常方便!含源码 V2.2
一个操作windows窗口的类“clsWindow”,使用非常方便!含源码 V2.2
307 0
一个操作windows窗口的类“clsWindow”,使用非常方便!含源码 V2.2
|
编译器 C# 图形学
Unity与 DLL文件 ☀️| 怎样使用VC++生成一个DLL文件并调用!(包括 在VS 中调用 和 在Unity中调用)
📢前言 🎬通过VC 生成DLL文件 🎥在VS中生成DLL文件 🏳️‍🌈第一步:新建一个dll项目 🏳️‍🌈第二步:新建一个`.h头文件`和`.cpp源文件` 🏳️‍🌈第三步:在`.h头文件`和`.cpp源文件`中编写代码 🏳️‍🌈第四步:生成dll和lib文件 🎥在VS中进行调用DLL文件 🚩第一步:先来新建一个项目 🚩第二步:复制firstDLLTest.dll和firstDLLTest.lib文件和上一个项目的头文件firstDLLTest.h 🚩第三步:在新项目里面添加C++代码 🚩第四步:添加头文件firstDLLTest.h和firstDLLTest.
Unity与 DLL文件 ☀️| 怎样使用VC++生成一个DLL文件并调用!(包括 在VS 中调用 和 在Unity中调用)
|
API Windows
VBS调用windows api函数(postmessage)实现后台发送按键脚本
'=========================================================================='' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.
2139 0