DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: zhangyu123456
今日帖子: 43
在线用户: 18
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 wohuai (灵成) ▲▲▲▲▲ -
普通会员
2018/4/11 17:52:14
标题:
关于dos实时回显 浏览:930
加入我的收藏
楼主: 测试了大部分的代码,只有hxb_leiyuan传导盒子上的demo基本能实现,但是这个demo需要带个spawn.exe,而且没有源码,想请教下大家,有没有其它实现方法
此帖子包含附件:wohuai_2018411175214.rar 大小:221.8K
----------------------------------------------
-
作者:
男 vkow (vkow) ▲▲▲▲△ -
普通会员
2018/4/11 18:02:46
1楼: 网上有dos执行的代码和教程啊。
搜一下,不少的。主要是利用通道pipe技术与cmd相互通讯。

事实回显是不可能的。

实现无非两种:
1使用定时器。
2使用线程轮询通道内容。
----------------------------------------------
-
作者:
男 hs_kill (lzl_17948876) ▲▲▲▲▲ -
普通会员
2018/4/11 18:45:30
2楼: https://www.cnblogs.com/lzl_17948876/p/5957582.html

参考这个
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 dorry (littlecat) ★☆☆☆☆ -
盒子活跃会员
2018/4/11 19:05:38
3楼: @hs_kill (lzl_17948876)   这个不能实时回显,只能回显结果。

"spawn.exe" is part of several "True Image" software versions by Acronis, such as "Acronis True Image Home 2012" and "True Image 2013." The file starts the program. The program functions as software to create backups of complete operating systems or documents, images, and other files. It utilizes the 'chkdsk' process or the 'cmd.exe' command processor to capture the input/output file for backups.
----------------------------------------------
泱泱华夏十亿兵,国耻期待儿孙平,愿提十万虎狼旅,跃马扬刀灭东京!
作者:
男 keymark (keymark) ▲△△△△ -
注册会员
2018/4/11 21:39:09
4楼: linux下.执行完毕才能显示呢.
----------------------------------------------
m3u8播放器:DPlayer/hlsjs-p2p-engine/ckplayer/flashls-dev/sewise-player/http不能播https某些情况下dns服务:coredns/http服务:miniweb/!http://www.lib4dev.com/topics/delphi>http://www.lib4dev.com/topics/pascal?p=34&s=!http://www.lib4dev.com/topics/delphi
作者:
男 dorry (littlecat) ★☆☆☆☆ -
盒子活跃会员
2018/4/11 22:41:07
6楼: 效果图
此帖子包含附件:
GIF 图像
大小:803.6K
----------------------------------------------
泱泱华夏十亿兵,国耻期待儿孙平,愿提十万虎狼旅,跃马扬刀灭东京!
作者:
男 dorry (littlecat) ★☆☆☆☆ -
盒子活跃会员
2018/4/11 23:15:56
7楼: 例子实现了:
1:实时读取已经打开的DOS 控制台的内容
2:执行DOS命令,隐藏控制台,并实时取得控制台的输出
3:不需要任何组件和程序。Delphi2007  win10 64位测试成功

有改进请共享
此帖子包含附件:dorry_2018411231556.zip 大小:248.8K
----------------------------------------------
泱泱华夏十亿兵,国耻期待儿孙平,愿提十万虎狼旅,跃马扬刀灭东京!
作者:
男 12288144 (12288144) ▲▲▲▲▲ -
普通会员
2018/4/11 23:55:31
8楼: 谢谢 dorry
----------------------------------------------
-
作者:
男 ghs_79 (ghs) ★☆☆☆☆ -
盒子活跃会员
2018/4/12 8:17:13
9楼: 2楼的代码,最完美。实时显示DOS程序的返回值。
----------------------------------------------
Delphi爱好者。
作者:
男 hs_kill (lzl_17948876) ▲▲▲▲▲ -
普通会员
2018/4/12 8:51:03
10楼: 我那个只不过吧回显变成返回值封装成函数了
你想实时, 就把var的返回值变成个回调函数, 然后在循环里取到值就回掉不就变成实时了么

或者你直接把这个函数改成线程执行体, 那样既可以及时输入也可以及时输出
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 snowman118 (光头强) ▲△△△△ -
注册会员
2018/4/12 10:29:27
11楼: @hs_kill 给个例子,试了,没成功。
----------------------------------------------
-
作者:
男 dorry (littlecat) ★☆☆☆☆ -
盒子活跃会员
2018/4/12 11:51:15
12楼: 例子更新实现了:
1:实时读取已经打开的DOS 控制台的内容
2:执行DOS命令,隐藏控制台,并实时取得控制台的输出
3:不需要任何组件和程序。Delphi2007  win10 64位测试成功
4:@ snowman118 (光头强),把 @hs_kill的代码改成实时回显了
感谢: @hs_kill)
此帖子包含附件:dorry_2018412115115.zip 大小:225.9K
----------------------------------------------
泱泱华夏十亿兵,国耻期待儿孙平,愿提十万虎狼旅,跃马扬刀灭东京!
作者:
男 ghs_79 (ghs) ★☆☆☆☆ -
盒子活跃会员
2018/4/12 12:02:02
12楼: type
  TCallBackInfo = procedure(aInfo: string) of object;
  TForm1 = class(TFrom)
  private
    procedure CallBackInfo(aInfo: string);
  end;
.........
procedure TForm1.CallBackInfo(aInfo: string);
begin
  mmo3.Lines.Add(aInfo);
end;

function DoCMD(ACommand: AnsiString; aCall: TCallBackInfo): Boolean;
var
  nStrs: TStringlist; {旧版本可以用TStringlist替代}      // TStringBuilder
  nHReadPipe, nHWritePipe: THandle;
  nSI: STARTUPINFO;
  nLSA: SECURITY_ATTRIBUTES;
  nPI: PROCESS_INFORMATION;
  nBufferSize, nRBufferSize, nEC: DWORD;
  nPH: array[0..4096] of AnsiChar;
begin
  Result := False;

  with nLSA do
  begin
    nLength := SizeOf(SECURITY_ATTRIBUTES);
    lpSecurityDescriptor := nil;
    bInheritHandle := True;
  end;

  if not CreatePipe(nHReadPipe, nHWritePipe, @nLSA, 0) then
    raise Exception.Create('管道创建失败 ' + SysErrorMessage(GetLastError));

  try
    GetStartupInfoA(nSI);
    with nSI do
    begin
      dwFlags := (STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW);
      wShowWindow := SW_HIDE;
      hStdOutput := nHWritePipe;
    end;
    ZeroMemory(@nPH, SizeOf(nPH));
    nStrs := TStringlist.Create;
    try
      if not CreateProcessA(nil, PAnsiChar(ACommand), nil, nil,
        True, 0, nil, nil, nSI, nPI) then
        raise Exception.Create('进程创建失败 ' + SysErrorMessage(GetLastError));
      try
        nRBufferSize := 0;
        repeat
          GetExitCodeProcess(nPI.hProcess, nEC);
          PeekNamedPipe(nHReadPipe, @nPH, Length(nPH) - 1, @nBufferSize, nil, nil);
          if nBufferSize <> 0 then
          begin
          ReadFile(nHReadPipe, nPH, nBufferSize, nRBufferSize, nil);
          nPH[nRBufferSize] := #0;
          nRBufferSize := 0;
          nStrs.Append(nPH);
          //这里可以用回调的方式,实现实时显示
          if Assigned(aCall) then
          aCall(nPH);

          end;
          Sleep(2); //可以避免一条语句被分成两行
        until nEC <> STILL_ACTIVE;
        nPH[nRBufferSize] := #0;
        nStrs.Append(nPH);
        //ACmdResult := nStrs.ToString;
        //ACmdResult := nStrs.Text;
        Result := True;
      finally
        CloseHandle(nPI.hThread);
        CloseHandle(nPI.hProcess);
      end;
    finally
      nStrs.Free;
    end;
  finally
    CloseHandle(nHReadPipe);
    CloseHandle(nHWritePipe);
  end;
end;
----------------------------------------------
Delphi爱好者。
作者:
男 ghs_79 (ghs) ★☆☆☆☆ -
盒子活跃会员
2018/4/12 12:03:31
13楼: 调用
procedure TForm1.btn6Click(Sender: TObject);
begin
  DoCMD('Ping.exe 127.0.0.1', CallBackInfo); //可以实现显示执行结果
end;
----------------------------------------------
Delphi爱好者。
作者:
男 dorry (littlecat) ★☆☆☆☆ -
盒子活跃会员
2018/4/12 12:03:57
13楼: 效果图
此帖子包含附件:
GIF 图像
大小:1.24M
----------------------------------------------
泱泱华夏十亿兵,国耻期待儿孙平,愿提十万虎狼旅,跃马扬刀灭东京!
作者:
男 ybj316 (ybj) ★☆☆☆☆ -
盒子活跃会员
2018/8/10 20:00:23
14楼: @ dorry (littlecat)  请问有D7下的代码吗?
----------------------------------------------
-
作者:
男 ybj316 (ybj) ★☆☆☆☆ -
盒子活跃会员
2018/8/10 20:51:02
15楼: 已解决!
----------------------------------------------
-
作者:
男 ptdelphi (Delphi) ▲▲△△△ -
注册会员
2018/8/10 23:12:49
16楼: 12楼好码,顶
----------------------------------------------
还可以更好
作者:
男 pcplayer (pcplayer) ▲▲▲▲▲ -
普通会员
2018/8/11 16:41:40
17楼: 网上有个控件,有源码的,TDosCommand
----------------------------------------------
-
作者:
男 kuei (kuei) ★☆☆☆☆ -
盒子活跃会员
2018/8/12 7:57:03
18楼: 这个吗?
此帖子包含附件:kuei_20188127573.zip 大小:8.2K
----------------------------------------------
-
作者:
男 ptdelphi (Delphi) ▲▲△△△ -
注册会员
2018/8/12 12:34:38
19楼: 还是感觉那个代码好用些
此帖子包含附件:ptdelphi_2018812123438.zip 大小:54.9K
----------------------------------------------
还可以更好
作者:
男 ybj316 (ybj) ★☆☆☆☆ -
盒子活跃会员
2018/8/12 16:21:16
20楼: kuei 分享的是早期的D7版,安装后完全可用。谢谢!!

ptdelphi 提供的最新版,D7不可用的,也谢谢!
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行54.6875毫秒 RSS