吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1094|回复: 4
收起左侧

[求助] delphi如何 WriteLn 用这个输出dir /w

[复制链接]
冥界3大法王 发表于 2022-10-25 20:54
我要达到的效果是: 既要控制台 输出 ,还能手动再执行控制台命令。
虽然有 DOSCommand-master 这个的组件。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
yulinsoft 发表于 2022-10-25 21:57
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 冥界3大法王 发表于 2022-10-25 23:06
xuanle6 发表于 2022-10-25 23:44
constructor TWaitRunThread.Create(const index:Integer; const CommandLine: string);
begin
    inherited Create(true); //Suspend为真,立即被悬挂
    FreeOnTerminate := True; //为真,运行完即删除
    FCommandLine := CommandLine;   Findex:=index;
end;

procedure TWaitRunThread.Execute; //执行线程
var
    SA: TSecurityAttributes;
    SI: TStartupInfo;
    PI: TProcessInformation;
    StdOutPipeRead, StdOutPipeWrite: THandle;
    WasOK: Boolean;
    Buffer: array[0..255] of AnsiChar;
    BytesRead: Cardinal;
    Handle: Boolean;
    s:string;
    i,u:Integer;
begin
    with SA do begin
        nLength := SizeOf(SA);
        bInheritHandle := True;
        lpSecurityDescriptor := nil;
    end;
    CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);
    try
        with SI do begin
            FillChar(SI, SizeOf(SI), 0);
            cb := SizeOf(SI);
            dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
            wShowWindow := SW_HIDE;
            hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin
            hStdOutput := StdOutPipeWrite;
            hStdError := StdOutPipeWrite;
        end;
        Handle := CreateProcess(nil, PChar('cmd.exe /C ' + FCommandLine), nil, nil, True, 0, nil, nil, SI, PI);
        CloseHandle(StdOutPipeWrite);
        if Handle then begin
            try
                u:=0;
                repeat
                    WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
                    if BytesRead > 0 then begin
                        Buffer[BytesRead] := #0;  u:=0;
                        s := StrPas(Buffer);
                        i:=pos('time=',s);
                        if i>0 then begin
                            Delete(s,1,i-1);
                            i:=pos('bitrate=',s);
                            FMsg:=Copy(s,1,i-1);
                            if(FMsg<>'')and Assigned(OnMsg) then begin
                                EnterCriticalSection(m_CS);
                                try
                                    OnMsg(Self, Findex, FMsg);
                                except
                                end;
                                LeaveCriticalSection(m_CS);
                            end;
                        end;
                    end
                    else if (BytesRead = 0)or(WasOK=False)then begin
                        inc(u); Sleep(200);
                    end;
                until (u>=3);
                if mStop then begin
                    //TerminateProcess(OpenProcess(PROCESS_TERMINATE, False, PI.dwProcessId),0);
                    FMsg:='停止';
                end
                else begin
                    //GetExitCodeProcess(ProcessInfo.hProcess, exitCode);
                    WaitForSingleObject(PI.hProcess, INFINITE);
                    FMsg:='完成'+FMsg;
                end;
                if Assigned(OnMsg) then OnMsg(Self, Findex, FMsg);
            finally
                CloseHandle(PI.hThread);
                CloseHandle(PI.hProcess);
            end;
        end;
    finally
        CloseHandle(StdOutPipeRead);
    end;
end;     

//这是控制台,自己把里面没用的代码删除掉
a5810797 发表于 2022-10-28 19:13

大佬 随机音乐求更新~~~ 感谢感谢感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表