Delphi执行DOS命令显示到文本框

Delphi执行DOS命令显示到文本框(TMemo)

2007-11-24 22:03


procedure CmdExecAndView(FileName: string; memo: TMemo);

procedure _AddInfo(mmInfo:TMemo; S: string; var line: string);

var

i, p: Integer;

begin

if mmInfo.Lines.Count > 800 then

mmInfo.Lines.Clear;

//去掉 \r

for i := 0 to Length(S) - 1 do

if S[i] = #13 then S[i] := ‘ ‘;

line := line + S;

// \n 断行

p := Pos(#10, line);

if p > 0 then

begin

// \n 前面的加入一行,后面的留到下次

mmInfo.Lines.Add(Copy(line, 1, p - 1));

line := Copy(line, p + 1, Length(line) - p);

end;

end;

var

hReadPipe, hWritePipe: THandle;

si: STARTUPINFO;

lsa: SECURITY_ATTRIBUTES;

pi: PROCESS_INFORMATION;

cchReadBuffer: DWORD;

ph: PChar;

fname: PChar;

line: string;

begin

fname := allocmem(1024);

ph := AllocMem(1024);

lsa.nLength := sizeof(SECURITY_ATTRIBUTES);

lsa.lpSecurityDescriptor := nil;

lsa.bInheritHandle := True;

if CreatePipe(hReadPipe, hWritePipe, @lsa, 0) = false then

Exit;

fillchar(si, sizeof(STARTUPINFO), 0);

si.cb := sizeof(STARTUPINFO);

si.dwFlags := (STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW);

si.wShowWindow := SW_HIDE;

si.hStdOutput := hWritePipe;

si.hStdError := hWritePipe;

StrPCopy(fname, FileName);

if CreateProcess(nil, fname, nil, nil, true, 0, nil, nil, si, pi) = False then

begin

FreeMem(ph);

FreeMem(fname);

Exit;

end;

CloseHandle(hWritePipe);

while (true) do

begin

if not PeekNamedPipe(hReadPipe, ph, 1, @cchReadBuffer, nil, nil) then break;

if cchReadBuffer <> 0 then

begin

if ReadFile(hReadPipe, ph^, 512, cchReadBuffer, nil) = false then break;

ph[cchReadbuffer] := chr(0);

_AddInfo(memo, ph, line);

end

else if (WaitForSingleObject(pi.hProcess, 0) = WAIT_OBJECT_0) then break;

Application.ProcessMessages;

Sleep(200);

end;

ph[cchReadBuffer] := chr(0);

_AddInfo(memo, ph, line);

CloseHandle(hReadPipe);

CloseHandle(pi.hThread);

CloseHandle(pi.hProcess);

FreeMem(ph);

FreeMem(fname);

end;

————————————————

调用方法(例如):CmdExecAndView(‘ping 202.96.134.134‘,Memo1);

有个问题:如果是CmdExecAndView(‘ping 202.96.134.134 -t‘,Memo1);

执行起来会不停的输出,没办法停止,点关闭窗口的按钮没反应,只能结束任务,期待着解决这个问题。

http://blog.csdn.net/shao9900/article/details/43951633

时间: 2024-10-06 18:52:35

Delphi执行DOS命令显示到文本框的相关文章

终于好了 ipython 里执行dos命令 显示结果却显示在kernel界面里 搞定了

import os cmd = r'type c:\foo.txt' os.system(cmd) import os cmd = r'type c:\foo.txt' os.system(cmd) 注意要有r  否则 \ 就是 另外的含义

c#执行Dos命令

效果图: 具体实现在代码中有详细的注释,请看代码. 实现执行CMD命令的核心代码(Cmd.cs): [csharp] using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Threading; using System.Management; using System.Globalization; na

在.net中悄悄执行dos命令,并获取执行的结果(转)

一.怎样使dos命令悄悄执行,而不弹出控制台窗口? 1.需要执行带“/C”参数的“cmd.exe”命令,它表示执行完命令后立即退出控制台.2.设置startInfo.UseShellExecute = false;     //不使用系统外壳程序启动进程3.设置startInfo.CreateNoWindow = true;     //不创建窗口 二.怎样得到dos命令的执行结果? 1.设置startInfo.RedirectStandardOutput = true;   //重定向输出,而

C#执行DOS命令(CMD命令)

在c#程序中,有时会用到调用cmd命令完成一些功能,于是在网上查到了如下方法,实现了c#执行DOS命令,并返回结果.         //dosCommand Dos命令语句         public string Execute(string dosCommand)         {             return Execute(dosCommand, 10);         }         /// <summary>         /// 执行DOS命令,返回DOS命

checkbox点击选中,再点击取消,并显示在文本框中

function checkItem(e,itemId) { var item = document.getElementById(itemId); var $items = $(item); if (e.checked) { var checkval = $items.val(); var str = $("#txtFilePath").val() + checkval; $("#txtFilePath").val(str); } else { var a = &

c# 设置和取消文件夹共享及执行Dos命令

/// <summary> /// 设置文件夹共享 /// </summary> /// <param name="FolderPath">文件夹路径</param> /// <param name="ShareName">共享名</param> /// <param name="Description">共享注释</param> /// <re

jquery实现&lt;body&gt;中点击按钮后,在&lt;tbody&gt;中显示一连串文本框

HTML中的代码如下: 1 <div style="background:#fff;border-style:solid; border-width:1px 1px 0 1px;border-color:#B8D0D6;"> 2 <div > 3 <div style="margin:-6px 0 0 0"> 4 <button class="button gray" type="button&

appium自动化测试框架——在python脚本中执行dos命令

一般我们运行dos命令,会有两种需求,一种是需要收集执行结果,如ip.device等:一种是不需要收集结果,如杀死或开启某个服务. 对应的在python中就要封装两种方法,来分别实现这两种需求. 1.引入包 import os 2.只执行不收集结果 os.system(command) 3.执行并手机结果 os.popen(command).readlines() 4.代码实现 1 #coding=utf-8 2 import os 3 4 class DosCmd: 5 ''' 6 用来封装w

Electron —— 执行DOS命令有乱码

现象 使用exec()执行DOS命令dir,结果出现乱码: 分析 代码如下: $(document).ready(() => { const exec = require('child_process').exec; // 任何你期望执行的cmd命令,ls都可以 let cmdStr = 'dir'; // 执行cmd命令的目录,如果使用cd xx && 上面的命令,这种将会无法正常退出子进程 let cmdPath = './'; // 子进程名称 let workerProces