[转]Delphi执行CMD命令

今天看到有人在问用代码执行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:[email protected]‘),nil,nil, SW_SHOWNORMAL);

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

ShellExecute(handle, ‘open‘,PChar(‘mailto:[email protected]?subject=这是邮件主题&[email protected]&body=邮件正文‘),nil,nil, SW_SHOWNORMAL);

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

时间: 2024-10-01 04:29:35

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

Atitit.执行cmd 命令行 php

Atitit.执行cmd 命令行 php 1. 执行cmd 命令行,调用系统命令的基础 1 1.1. 实际执行模式 1 1.2. 空格的问题 1 1.3. 中文路径的问题,程序文件读取编码设置 1 1.4. 回显乱码 2 2. exec,system等函数调用系统命令 2 3. php.ini,关掉安全模式safe_mode = off 3 4. 参考 3 1. 执行cmd 命令行,调用系统命令的基础 1.1. 实际执行模式 Processmonitor 检查.得到.. PID: 115372,

JAVA之执行cmd命令

感言在前:时隔好久没有更新博客园了,忙东忙西也没忙出个什么之所以然来.回首过去的几个月,只能用“疲倦”两个字来形容,时间飞逝地很快,有苦也有乐,有酸也有甜. 好了,矫情的话就说到这.百忙之中,我还是记得抽些时间来更博. class ExecCmd { public static void main(String args[]) { Runtime run = Runtime.getRuntime(); Process process = null; try { process = run.exe

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

1.java执行cmd命令并获取输出结果 1 import java.io.BufferedReader; 2 import java.io.InputStreamReader; 3 4 import org.apache.commons.lang3.text.StrBuilder; 5 6 /** 7 * 8 * @author user1 9 */ 10 public class DeleteProgram { 11 public static void run() { 12 Runtime

.Net执行cmd命令

using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.W

C# 执行CMD命令的方法

/// <summary> /// 执行CMD命令 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string ExeCmd(string str) { try { //string str = Console.ReadLine(); System.Diagnostics.Process p =

Python利用多线程定时执行cmd命令关机

利用os模块可以执行cmd命令,利用这一点可以实现定时关机,然而在等待关机的过程中也不能啥都不干,于是多线程派上了用场. #! /usr/bin/env python #coding=utf-8 #这里需要引入三个模块 import time, os, sched, easygui, thread # 第一个参数确定任务的时间,返回从某个特定的时间到现在经历的秒数 # 第二个参数以某种人为的方式衡量时间 schedule = sched.scheduler(time.time, time.sle

java执行cmd命令

从网上找的java执行cmd命令的文章,摘抄一段. java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后封闭命令窗口. cmd /k dir 是执行完dir命令后不封闭命令窗口. cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会封闭. cmd /k start dir 会打开一个新窗口后执行dir指令,原窗口不会封闭. 可以用cmd / 查看帮助信息. ★CMD命令★1

C# 执行CMD 命令

/// <summary> /// 执行CMD 命令 /// </summary> /// <param name="strCommand">命令串</param> /// <returns></returns> public static string RunCommand(string strCommand) { Process process = new Process(); process.StartInf

执行cmd命令

说明:主要代码是从 http://tieba.baidu.com/p/3214053453 抄录的 Demo下载:https://git.oschina.net/xieyimo9/zhixingcmdmingling.git 主要思路: { 建立两条管道,一条负责从程序(进程)往新建立的cmd进程传信息,另一条则反过来,从cmd进程传信息给程序 程序通过 WriteIn 写入,cmd进程 从 ReadIn 读到程序写入的信息 cmd进程 的返回值或错误通过 WriteOut 写入,程序从 Rea