今天看到有人在问用代码执行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(4个例子都是通过管道取得)

    //K8执行DOS并返回结果 function RunDosCommand(Command: string): string; var hReadPipe: THandle; hWritePipe:  ...

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

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

  3. [转]Delphi执行CMD命令

    今天看到有人在问用代码执行CMD命令的问题,就总结一下用法,也算做个备忘. Delphi中,执行命令或者运行一个程序有2个函数,一个是winexec,一个是shellexecute.这两个大家应该都见 ...

  4. [转]Delphi调用cmd的两种方法

    delphi调用cmd的两种方法vars:string;begins:='cmd.exe /c '+edit1.Text+' >c:\1.txt';winexec(pchar(s),sw_hid ...

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

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

  6. Delphi通过管道执行外部命令行程序(cmd)并获取返回结果

    该代码片段来自于: http://www.sharejs.com/codes/delphi/8999,发现好多代码,想用的时候找不到,记录一下备用 function RunDosCommand(Com ...

  7. delphi xe7 多线程调用CMD,使用管道,临界区技术,实现指定用户名,多线程,异步返回CMD命令结果到memo

    第一次发这个,发现格式很乱,不好看,可以用XE7的project--format project sources命令格式化一下代码. 后面我会上传此次修改函数用的源代码到云盘 链接: http://p ...

  8. [转]Delphi调用cmd并取得输出文本

    //转自http://www.oschina.net/code/snippet_136241_3980 1 procedure CheckResult(b: Boolean); begin if no ...

  9. Delphi exe实例之间传递cmd参数

    {Unit1.pas} 通过这个单元的Button,调用另一个实例: procedure TForm1.Button1Click(Sender: TObject); begin ShellExecut ...

随机推荐

  1. wampserver 403 禁止访问

    解决方法:修改Apache配置文件httpd.conf,注释掉 deny from all:将Allow from 127.0.0.1改为Allow from all

  2. C++开发过程多线程同步lock的实现

    在程序开发过程经常使用到多线程,而多线程始终与锁存在紧密地联系,以下详细的介绍如何在C++程序开发过程中自定义锁的几种方法. 1. 下面给出一段代码展现如何通过Mutex实现锁的功能(window p ...

  3. LPTHW 笨办法学python 33章

    32-33章节 将for-loop和while-loop循环的. 俩种句法就不说了.简单说下个人对于for和while的理解. 我觉得他learn python the hard way这里的写法是, ...

  4. Java编程经验——Long等包装类型判断

    int等基本数据类型的值是可以通过=或者!=进行比较的,但是对于Long等包装类型想比较其和某个值是否相等是不能通过=或者!=来比较的,那究竟要怎么样进行比较呢? if (null != projec ...

  5. WinForm DataGridView根据选中的复选框删除

    注意:在DataGridView添加一列(name:delete),ColumnType属性为:DataGridViewCheckBoxColumn,FlaseValue属性为:Flase,TureV ...

  6. IntelliJ IDEA 工具常用快捷键

    IntelliJ IDEA是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.各类版本工具(git.svn.g ...

  7. 关于Kendo的Grid 单元格样式

    <!DOCTYPE html><html style="height: 100%;"><head><meta http-equiv=&qu ...

  8. maven加载jar包配置

    maven build时报程序包不存在和找不到符号的错误,但是代码中不报错,如下: [ERROR] Failed to execute goal org.apache.maven.plugins:ma ...

  9. SpringMVC——文件上传

    ----------------------------------------------------------------------------spring.xml-------------- ...

  10. C#中String转int问题

    String转int主要有四种方法 1. int.Parse()是一种类容转换:表示将数字内容的字符串转为int类型. 如果字符串为空,则抛出ArgumentNullException异常: 如果字符 ...