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

原文 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");

    }

时间: 2024-09-03 02:03:20

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

Android平台中实现数据存储的5种方式_Android

本文介绍Android中的5种数据存储方式,具体内容如下   数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是:  1 使用SharedPreferences存储数据  2 文件存储数据  3 SQLite数据库存储数据  4 使用ContentProvider存储数据  5 网络存储数据   下面将为大家一一详细介绍.   第一种:使用SharedPreferences存储数据  SharedPreferences是Android平台上一个轻量级

java-mybatis调用存储过程有几种方式

问题描述 mybatis调用存储过程有几种方式 mybatis调用存储过程除了call的方式还有其他的吗,用call调用有很多缺陷,只能按参数顺序传值,如果存储过程增加一个值对应的代码还得改,有的值用默认值就可以,但是没法传默认值,求解 解决方案 http://sishuok.com/forum/blogPost/list/3898.html 解决方案二: http://blog.csdn.net/zhaoweitco/article/details/10831091 解决方案三: 可以直接在x

android中Webview实现截屏三种方式小结

本人最近学习了android中Webview实现截屏三种方式,下面我来记录一下,有需要了解的朋友可参考.希望此文章对各位有所帮助. 第一种方式 通过调用webview.capturePicture(),得到一个picture对象,根据图像的宽和高创建一个Bitmap,再创建一个canvas,绑定bitmap,最后用picture去绘制. //获取Picture对象 Picture picture = wv_capture.capturePicture(); //得到图片的宽和高(没有reflec

用excel高级筛选中选择不重复记录两种方式的差异图解

  excel中高级筛选中选择不重复记录两种方式的差异 高级筛选分为两种方式 在原有区域显示筛选结果 将筛选结果复制到其他位置 在原有区域显示筛选结果被筛选掉的行只是被隐藏了 第二种方式 将筛选结果复制到其他位置 被筛选掉的行已经是被删除的 选中数据区域 观察这个数据区域中有两个行是有重复的 并且分别出现过两次 而且是挨着的 鼠标点按a1单元格 拖动鼠标到e25单元格 松开鼠标 点击菜单栏 数据 筛选 高级筛选命令 在弹出的高级筛选对话框的方式 选择为将筛选结果复制到其他位置 点击复制位置后面的

从流程的自动化中获得最大价值的10种方式

本文讲的是 :从流程的自动化中获得最大价值的10种方式,流程自动化很好,如果它可以节省时间并减少错误.但是如果它不能在业务流程中"很好地契合",那么会难以得到普及.问问有谁没有对语音助手感到伤脑筋. 所幸的是,某些最佳实践让你可以从流程自动化中获得最大价值,以下就是其中的10项. 1.保持简单 一个流程自动化项目越复杂,那么就会出现越来越多的故障点,就越难以修复.当数据切换简单易行,你不要做太多干预的时候,自动化的效果是最好的. 2.如果是语音自动化,必须是单音节! 转向采用基于语音技

ajax中data传参的两种方式分析

本文实例讲述了ajax中data传参的两种方式.分享给大家供大家参考,具体如下: 1. POST方式: /** * 订单取消 * @return {Boolean} 处理是否成功 */ function orderCancel(orderId, commant){ var flag = false; $.ajax({ type: "POST", url: "../order/orderCancel.action", //orderModifyStatus data:

ajax中data传参的两种方式分析_AJAX相关

本文实例讲述了ajax中data传参的两种方式.分享给大家供大家参考,具体如下: 1. POST方式: /** * 订单取消 * @return {Boolean} 处理是否成功 */ function orderCancel(orderId, commant){ var flag = false; $.ajax({ type: "POST", url: "../order/orderCancel.action", //orderModifyStatus data:

获得数据库连接池中数据连接资源的两种方式

相比于从数据库中直接获取数据库连接,使用数据库连接池的方式可以很大程度的提高数据库连接的效率.因此我们在实际开发中通常会采用数据库连接池的方式获取数据库的连接,在使用完成后这些资源再返还给数据库连接池.下面我们就来看一看常用的数据库连接池的简单的方法. 使用DBCP方式 话不多说,直接上代码.这里仅仅是一个简单的效果呈现,所以只需要打印出一句话即可. package jdbcpool; import java.sql.Connection; import org.apache.commons.d

Android中访问sdcard路径的几种方式

以前的Android(4.1之前的版本)中,SDcard路径通过"/sdcard"或者"/mnt/sdcard"来表示,而在JellyBean(安卓4.1)系统中修改为了" /storage/sdcard0",还会有多个SDcard的情况.目前为了保持和之前代码的兼容,SDcard路径做了Link映射.为了使代码更加健壮并能兼容以后的Android版本和新设备,安卓4,1后sdcard中会有系统自动生成的保存特定内容的的文件目录,从而可以使用一些