今天看到有人在问用代码执行CMD命令的问题,就总结一下用法,也算做个备忘。

Delphi中,执行命令或者运行一个程序有2个函数,一个是winexec,一个是shellexecute。这两个大家应该都见过,其中,winexec比较简单,可以直接运行一个外部程序,shellexecute则更高级一些,除了可以运行外部exe,还可以执行特殊命令。

下面我们就分别举例子说明:我们先来看看运行一个exe程序,以记事本为例:

WinExec(PChar(' notepad .exe'),SW_NORMAL);//正常模式打开

WinExec(PChar(' notepad .exe'),SW_HIDE);//隐藏方式打开

WinExec(PChar('notepad.exe'),SW_SHOWMAXIMIZED);//最大化方式打开,软件必须支持最大化运行,否则该参数无效,以NORMAL方式运行

WinExec(PChar('notepad.exe'),SW_SHOWMINIMIZED);//最小化方式打开

Shellexecute(handle,nil,'notepad.exe',nil,nil,sw_normal);//这个是用shellexecute的方式打开,注意最后一个参数,和上面一样

使用Shellexecute注意需要uses ShellApi,上面的记事本,因为是在系统目录下,所以可以直接写notepad.exe文件名,而不必写路径,如果是其他非环境变量中注册的exe,则需要带上绝对路径或者相对路径

好,上面是最简单的,下面我们来说说带参数的运行,大家知道,有些exe程序在运行的时候可以附加参数,这里以cmd为例说明

比如,我想运行ping命令,去执行ping 192.168.1.1

WinExec(PChar( 'cmd.exe /c  ping 192.168.1.1'),SW_SHOWNORMAL);

shellexecute(handle,nil,'cmd.exe',pchar('/c ping 192.168.1.1'),nil,sw_normal);

注意,cmd的命令需要是用/c表示带参数运行,然后后面跟上具体命令,这样就可以执行ping命令了。

上面的命令的确可以成功运行,但是有个缺点,那就是cmd在执行完毕后就会自动关闭窗口,如果有时候命令执行的过快,我们根本看不清结果,那么,有什么办法可以让cmd在执行完毕后不关闭窗口呢?答案是肯定的,我们需要一个额外的命令pause

WinExec(PChar( 'cmd.exe /c  ping 192.168.1.1 & pause'),SW_SHOWNORMAL);

我们注意红色部分,我们使用一个&符号和pause,pause是批处理中的暂停命令,&符号则表示可以执行多个命令,上面的例子就表明,在执行完ping命令后再执行pause命令,这样,窗口就不会关闭了。shellexecute同样支持该方法。

下面,我们看看shellexecute其他的一些方法:

打开网页:这个太简单了,大家应该都知道

ShellExecute(handle, 'open', PChar('http://www.baidu.com'), nil, nil, SW_SHOWNORMAL);//使用默认浏览器打开baidu.com

ShellExecute(handle, 'open', 'firefox.exe',PChar('http://www.baidu.com'),nil, SW_SHOWNORMAL);//使用火狐浏览器打开baidu.com

当然,shellexecute还支持在系统中注册过的关联命令。比如发邮件

ShellExecute(handle, 'open',PChar('mailto:123@123.com'),nil,nil, SW_SHOWNORMAL);

执行这句就可以打开默认邮件客户端给123@123.com发邮件了,如果我们想带上主题和内容也很好办:

ShellExecute(handle, 'open',PChar('mailto:123@123.com?subject=这是邮件主题&bcc=123@123.com&body=邮件正文'),nil,nil, SW_SHOWNORMAL);

上面的就可以自动填写主题,内容和抄送了,注意,中文需要编码,否则可能出现乱码。

[转]Delphi执行CMD命令的更多相关文章

  1. delphi执行cmd命令和bat文件

    转载地址:http://blog.csdn.net/hutao1101175783/article/details/42807063 cmd:='echo d | Xcopy '+BasePath+' ...

  2. [delphi]运行cmd命令,并取得输出字符

     http://blog.csdn.net/nerdy/article/details/8969189 [delphi]运行cmd命令,并取得输出字符 标签: delphiCMD命令 2013-05- ...

  3. JAVA之执行cmd命令

    感言在前:时隔好久没有更新博客园了,忙东忙西也没忙出个什么之所以然来.回首过去一两个月,只能用“疲倦”两个字来形容,而且是身心疲惫.每天11.12个小时的工作我都没觉得烦,但是总是想克服却又很难克服的 ...

  4. C# 执行CMD 命令

    /// <summary> /// 执行CMD 命令 /// </summary> /// <param name="strCommand">命 ...

  5. C# 执行CMD命令的方法

    /// <summary> /// 执行CMD命令 /// </summary> /// <param name="str"></para ...

  6. 如何使用Java执行cmd命令

    用JAVA代码实现执行CMD命令的方法! Runtime rt = Runtime.getRuntime(); Process p = rt.exec(String[] cmdarray);     ...

  7. java执行cmd命令并获取输出结果

    1.java执行cmd命令并获取输出结果 import java.io.BufferedReader; import java.io.InputStreamReader; import org.apa ...

  8. Java 调用并执行cmd命令

    cmd java 调用 执行 概要: Java 调用并执行cmd命令 Java | 复制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2 ...

  9. Atitit.执行cmd 命令行 php

    Atitit.执行cmd 命令行 php 1. 执行cmd 命令行,调用系统命令的基础 1 1.1. 实际执行模式 1 1.2. 空格的问题 1 1.3. 中文路径的问题,程序文件读取编码设置 1 1 ...

随机推荐

  1. 小细节:Java中split()中的特殊分隔符 小数点

    这两天做项目过程中由于数据表字段设计的太恶心了,导致自己填坑 关于微信支付和支付宝的支付有一个不同点:就是金额的处理,支付宝金额的单位是0.01元,但是微信支付中1表示0.01元,当时设计价格的时候使 ...

  2. Selenium 脚本稳定性问题

    运行一个星期前升至更久前的脚本,,,出现如下错误提示 elementNotVisibleException was unhandled by user code. 经过询问大侠,说我的脚本不够健全,也 ...

  3. ubuntu下使用ngrok外网映射

    好久之前想搞明白这个事情,可是就是不知道这个词叫外网映射,所以也一直不知怎么做,在慕课网看用java开发微信公众号的时候教程里提到了外网映射,查了一些资料终于把本地给映射到外网了,直接变成了80端口, ...

  4. 锐浪应用小插曲,asp.net下的使用

    下午提前完成了今天的工作内容,整了下bs中的应用,嘿嘿,其中遇到不少问题,接下来说下大概会遇到哪些问题,1:grid++ 6.0插件下载安装之后ie浏览器无法打开,居然什么都没有显示,奇葩啊,系统版本 ...

  5. html/php, 二个文本框求和,在第三个框中显示

    我想要实现的是第三个文本框本来输出的是默认值,按了提交按钮之后,显示了一个我通过php某个计算后想要输出的值,如何实现?就好比说:我输入两个数,我按了个提交按钮之后,那个第三个文本框本来输出是“输出框 ...

  6. [LeetCode] Distinct Subsequences 解题思路

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  7. C#中同时使用Lambda表达式和递归

    Func<object, int> RTFunc = (RTFuncRT) => { return (RTFuncRT as Func<object, int>)(RTF ...

  8. C#在ASP.NET4.5框架下的首次网页应用

    运行效果预览: 先看实践应用要求: 1.编写一个函数,用于计算1!+2!+3!+4!+5!,在控制台或页面输出运行结果. 2.在控制台或页面输出九九乘法表. 3.输入10个以内的整数,输出该组整数的降 ...

  9. spark-streaming-kafka包源码分析

    转载请注明原创地址 http://www.cnblogs.com/dongxiao-yang/p/5443789.html 最近由于使用sparkstreaming的同学需要对接到部门内部的的kafk ...

  10. JS时钟钟表

    <!DOCTYPE html> <html>    <head>        <meta charset="utf-8" />   ...