简介

我们用C#来开发客户端程序的时候,总会不可避免的需要调用外部程序或者访问网站,本篇博客介绍了三种调用外部应用的方法,供参考

实现

第一种是利用shell32.dll,实现ShellExecute方法,该方法可同时打开本地程序、文件夹或者访问网站,只要直接输入路径字符串即可, 如C:\Users\Desktop\xx.exe或者https://cn.bing.com/,可以根据返回值判断是否调用成功 (成功0x00000002a , 失败0x00000002)

Window wnd = Window.GetWindow(this);    //获取当前窗口
var wih = new WindowInteropHelper(wnd); //该类支持获取hwnd
IntPtr hwnd = wih.Handle; //获取窗口句柄 var result = ShellExecute(hwnd, "open", "需要打开的路径如C:\Users\Desktop\xx.exe", null, null, (int)ShowWindowCommands.SW_SHOW);
[DllImport("shell32.dll")]
public static extern IntPtr ShellExecute(IntPtr hwnd, //窗口句柄
string lpOperation, //指定要进行的操作
string lpFile, //要执行的程序、要浏览的文件夹或者网址
string lpParameters, //若lpFile参数是一个可执行程序,则此参数指定命令行参数
string lpDirectory, //指定默认目录
int nShowCmd //若lpFile参数是一个可执行程序,则此参数指定程序窗口的初始显示方式(参考如下枚举)
);
public enum ShowWindowCommands : int
{
SW_HIDE = ,
SW_SHOWNORMAL = ,
SW_NORMAL = ,
SW_SHOWMINIMIZED = ,
SW_SHOWMAXIMIZED = ,
SW_MAXIMIZE = ,
SW_SHOWNOACTIVATE = ,
SW_SHOW = , //显示一个窗口,同时令其进入活动状态
SW_MINIMIZE = ,
SW_SHOWMINNOACTIVE = ,
SW_SHOWNA = ,
SW_RESTORE = ,
SW_SHOWDEFAULT = ,
SW_MAX =
}

第二种是利用kernel32.dll,实现WinExec方法,该方法仅能打开本地程序,可以根据返回值判断是否调用成功(<32表示出现错误)

var result = WinExec(pathStr, (int)ShowWindowCommands.SW_SHOW);
[DllImport("kernel32.dll")]
public static extern int WinExec(string programPath, int operType);

第三种方法是利用Process类,Process类具体应用可以看类的定义,这里只实现它打开文件和访问网站的用法,(其他使用方法请参考https://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=vs.110).aspx),调用失败会抛出异常

 /// <devdoc>
/// <para>
/// Provides access to local and remote
/// processes. Enables you to start and stop system processes.
/// </para>
/// </devdoc>

具体实现为

 //调用程序           
Process process = new Process();
try
{
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = pathStr;
process.StartInfo.CreateNoWindow = true;
process.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
//访问网站
try
{
Process.Start("iexplore.exe", pathStr);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

可以看出来,C#调用外部程序还是比较容易的~    有补充的地方欢迎留言,谢谢

Demo下载

链接: https://pan.baidu.com/s/1G1PAneEJSCQR3hGpGpaDzQ

密码: rtew

C# 客户端程序调用外部程序的三种实现的更多相关文章

  1. 调用awk的三种方式

    调用awk的三种方式 调用awk有三种方式,一种为Shell命令行方式,另外两种是将awk程序写入脚本文件,然后执行该脚本文件.三种方式的命令格式归纳如下: 一.在Shell命令行输入命令调用awk, ...

  2. Spring如何使用JdbcTemplate调用存储过程的三种情况

    注:原文 <Spring如何使用JdbcTemplate调用存储过程的三种情况 > Spring的SimpleJdbcTemplate将存储过程的调用进行了良好的封装,下面列出使用Jdbc ...

  3. Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我 ...

  4. C# .NET 动态调用webservice的三种方式

    转载自 百度文库 http://wenku.baidu.com/link?url=Q2q50wohf5W6UX44zqotXFEe_XOMaib4UtI3BigaNwipOHKNETloMF4ax4W ...

  5. 第十九篇:提高SOUI应用程序渲染性能的三种武器

    SOUI是一套100%开源的基于DirectUI的客户端开发框架. 基于DirectUI设计的UI虽然UI呈现的效果可以很炫,但是相对于传统的win32应用程序中每个控件一个窗口句柄的形式,渲染效率是 ...

  6. Android程序完全退出的三种方法

    很多网友可能发现自己的Android程序有很多Activity,比如说主窗口A,调用了子窗口B,在B中如何关闭整个Android应用程序呢? 这里Android123给大家三种比较简单的方法实现. 首 ...

  7. python脚本调用外部程序的若干种方式以及利弊

    脚本执行外部程序的常用几种方式: # os.popen(path)# subprocess.run(cmd,shell=True)# subprocess.check_call(cmd,shell = ...

  8. 黑马程序员——OC基础 三种特性之封装

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三种特性之一封装 (一)set方法和get方法 1)  set方法 1&g ...

  9. PHP 调用外部程序的几种方式

    /* php 调用python 的代码 // 第一种: // echo passthru('C:/Python34/PY.exe D:/do.py'); // 第二种: // echo exec('C ...

随机推荐

  1. RouterPassView——路由器密码查看工具

    大多数现代路由器都可以让您备份一个文件路由器的配置文件,然后在需要的时候从文件中恢复配置.路由器的备份文件通常包含了像您的ISP的用户名重要数据/密码,路由器的登录密码,无线网络的KEY. 如果你忘记 ...

  2. 原生js怎样获取后台端口数据

    全称: XMLHttpReques <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  3. NEO从入门到开窗(1) - 一个智能合约的诞生

    一.啰嗦两句 最近一直都在研究区块链,BitCoin,Etherenum, Hyper Ledger Fabric还有今天的主角小蚂蚁,当然出名以后改了一个艺名叫NEO.区块链大部分都是用Golang ...

  4. Java安装和环境变量配置

    一.Java的安装 1.下载合适的版本,安装jdk和jre到同一路径下的同一文件夹下,例如:都安装在 E:\Java: 备注:  JDK:Java Development Kit :  JRE: Ja ...

  5. Java CAS机制详解

    CAS目的: 在多线程中为了保持数据的准确性,避免多个线程同时操作某个变量,很多情况下利用关键字synchronized实现同步锁,使用synchronized关键字修可以使操作的线程排队等待运行,可 ...

  6. 001-List,数组,Set,Map属性的映射

    hibernate.cfg.xml: <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configur ...

  7. 剑指Kubernetes 揭秘腾讯云的PaaS技术选型策略

    1.前言 Kubernetes 很火,一大批互联网公司早已领先一步,搭建起专有的 PaaS平台,传统企业们看到的 Kubernetes的趋势,亦不甘落后,在试水的道上一路狂奔-- 虽然,Kuberne ...

  8. [BZOJ 1297][SCOI2009]迷路

    1297: [SCOI2009]迷路 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1418  Solved: 1017[Submit][Status ...

  9. 新事物学习---Chrome上使用PWA

    PWA是什么 PWA(Progressive Web Apps)是 Google 最近在提的一种 Web App 形态 (或者如 Wikipedia 所称的"软件开发方法").PW ...

  10. 利用flask 实现简单模版站

    from flask import Flask,render_template from flask import request app = Flask(__name__) @app.route(' ...