| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3832 人关注过本帖
标题:用delphi7怎么调用DOS并显示在label(标签)里??
只看楼主 加入收藏
lfkm
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-4-19
结帖率:100%
收藏
 问题点数:0 回复次数:14 
用delphi7怎么调用DOS并显示在label(标签)里??
我想在一个TEXT控件里输入dos命令 dir c\*.*. 然后按确定后,dos里显示的内容都转到label(标签)里显示,而不是在dos里显示..(界面上有TEXT、BUTTON、LABEL三个控件)
那位高手能帮帮忙写出一个完整的源代码吗?我看了几天网上介绍都看不懂,也不是我想要的结果.
搜索更多相关主题的帖子: label DOS 
2008-04-19 19:35
yeye55
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:152
注 册:2007-1-19
收藏
得分:0 
第一:为什么要用label?用Memo不是更好?
第二:对于内部命令要写成cmd /c dir *.*的格式,Win98是command /c dir *.*,因为内部命令没有对应的可执行文件。

核心代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
    SecurityAttributes : TSecurityAttributes;
    hProcess           : TProcessInformation;
    StartupInfo        : TStartupInfo;
    hReadPipe,hWritePipe : THandle;
    Buff : array [0..256] of char;
    Num : DWORD;
    dwExit:DWORD;
    SendName : String;
    s : String;
begin
    SecurityAttributes.nLength:=Sizeof(SecurityAttributes);
    SecurityAttributes.lpSecurityDescriptor:=nil;
    SecurityAttributes.bInheritHandle:=true;
    CreatePipe(hReadPipe,hWritePipe,@SecurityAttributes,0);
    FillChar(StartupInfo,Sizeof(StartupInfo),#0);
    StartupInfo.cb:=Sizeof(StartupInfo);
    StartupInfo.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
    StartupInfo.wShowWindow:=SW_HIDE;
    StartupInfo.hStdOutput:=hWritePipe;
    StartupInfo.hStdError:=hWritePipe;
    if CreateProcess(nil,PChar(self.Edit1.Text),
                     @SecurityAttributes,
                     @SecurityAttributes,
                     true,0,nil,nil,
                     StartupInfo,
                     hProcess) then
    begin
        CloseHandle(hProcess.hThread);
        WaitForSingleObject(hProcess.hProcess,INFINITE);
        GetExitCodeProcess(hProcess.hProcess,dwExit);
        CloseHandle(hProcess.hProcess);
        CloseHandle(hWritePipe);
        Num:=0; s:='';
        while ReadFile(hReadPipe,Buff,256,Num,nil) do
        begin
            Buff[Num]:=#0;
            s:=s+Buff;
        end;
        CloseHandle(hReadPipe);
        //
        self.Label1.Caption:=s;
    end
    else
        MessageBox(self.Handle,PChar('调用命令 '+self.Edit1.Text+' 失败!'),'调用失败',MB_OK or MB_ICONWARNING);
end;

我的百度空间→http://hi.baidu.com/yeye55
2008-04-19 20:11
lfkm
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-4-19
收藏
得分:0 
谢谢楼上的高手.至于用LABEL还是MEMO,是个人喜欢,我是个新手只知道LABEL可以显示,还没有懂得别的控件可用呢.
那你就改用MEMO吧.
可是我在TEXT里输入DIR.结果是'调用DIR失败'
问题出在哪?
2008-04-19 20:45
DreamHK
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-4-6
收藏
得分:0 
设置label1的AutoSize属性为false,WordWrap属性为true.

procedure TForm1.Button1Click(Sender: TObject);
var
  cmd:string;
  tmp:integer;
  buffer:array [0..1000]of char;
begin
  cmd:=edit1.Text;
  winexec(pchar('cmd /c '+cmd+' >tmp.tmp'),sw_hide);
  sleep(100);//如果要执行的命令比较耗时,请设置一定的等待时间.(内部命令不必...)
  tmp:=fileopen('tmp.tmp',fmOpenReadWrite);
  fileread(tmp,buffer,sizeof(buffer));
  label1.Caption:=buffer;
  fileclose(tmp);
end;
2008-04-19 21:45
DreamHK
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2008-4-6
收藏
得分:0 
用memo控件的话更简单:
procedure TForm1.Button1Click(Sender: TObject);
var
  cmd:string;
begin
  cmd:=edit1.Text;
  winexec(pchar('cmd /c '+cmd+' >tmp.tmp'),sw_hide);
  sleep(100);
  memo1.Lines.LoadFromFile('tmp.tmp');
end;
2008-04-19 21:49
yeye55
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:152
注 册:2007-1-19
收藏
得分:0 
[bo]以下是引用 [un]lfkm[/un] 在 2008-4-19 20:45 的发言:[/bo]

谢谢楼上的高手.至于用LABEL还是MEMO,是个人喜欢,我是个新手只知道LABEL可以显示,还没有懂得别的控件可用呢.
那你就改用MEMO吧.
可是我在TEXT里输入DIR.结果是'调用DIR失败'
问题出在哪? ...


要输入:cmd /c dir

我的百度空间→http://hi.baidu.com/yeye55
2008-04-19 22:17
lfkm
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-4-19
收藏
得分:0 
[bo]以下是引用 [un]yeye55[/un] 在 2008-4-19 22:17 的发言:[/bo]



要输入:cmd /c dir

好像只对存放delphi文件路径有用.我把CMD /C DIR改为CMD /F DIR就看存放该文件路径了.
CMD /C DIR中的/C是不是C盘?
2008-04-20 01:22
lfkm
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-4-19
收藏
得分:0 
[bo]以下是引用 [un]DreamHK[/un] 在 2008-4-19 21:45 的发言:[/bo]

设置label1的AutoSize属性为false,WordWrap属性为true.

procedure TForm1.Button1Click(Sender: TObject);
var
  cmd:string;
  tmp:integer;
  buffer:array [0..1000]of char;
begin
  cmd:=edit1.Text;
  winexe ...

这方法对用DIR很合我意思了..哈哈..只是我再用ipconfig想查下IP就要等好久和狂按按钮才看它一闪而过,为什么会这样呢?
2008-04-20 01:31
lfkm
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2008-4-19
收藏
得分:0 
[bo]以下是引用 [un]DreamHK[/un] 在 2008-4-19 21:49 的发言:[/bo]

用memo控件的话更简单:
procedure TForm1.Button1Click(Sender: TObject);
var
  cmd:string;
begin
  cmd:=edit1.Text;
  winexec(pchar('cmd /c '+cmd+' >tmp.tmp'),sw_hide);
  sleep(100);
  memo1.Lines.LoadFr ...

用这个使用ipconfig就直接报错.说有另一个程序在使用它之类的.
不过还是谢谢高手了..哈哈...解决一个又出来一个...
2008-04-20 01:46
yeye55
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:66
专家分:152
注 册:2007-1-19
收藏
得分:0 
[bo]以下是引用 [un]lfkm[/un] 在 2008-4-20 01:22 的发言:[/bo]


好像只对存放delphi文件路径有用.我把CMD /C DIR改为CMD /F DIR就看存放该文件路径了.
CMD /C DIR中的/C是不是C盘?


cmd 是启动命令行的意思,/c 的意思是启动命令行后执行随后的命令,dir 是一个内部命令,例如:查看F盘根目录就要输入 cmd /c dir f:\

ipconfig 是一个外部命令,外部命令是以一个单独的可执行文件形式存放,ipconfig.exe 位于C:\WINNT\system32文件夹下,调用外部命令可以直接输入命令,例如:输入 ipconfig /all

我的百度空间→http://hi.baidu.com/yeye55
2008-04-20 09:28
快速回复:用delphi7怎么调用DOS并显示在label(标签)里??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028594 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved