zoukankan      html  css  js  c++  java
  • Delphi 调用其它EXE文件

    function WinExecute(FileName: string; Visibility: Integer = SW_NORMAL): Boolean;
    {* 运行一个文件并立即返回 }

    function WinExecAndWait32(FileName: string; Visibility: Integer = SW_NORMAL;
      ProcessMsg: Boolean = False): Integer;
    {* 运行一个文件并等待其结束}

    function WinExecWithPipe(const CmdLine, Dir: string; slOutput: TStrings;
      var dwExitCode: Cardinal): Boolean; overload;
    function WinExecWithPipe(const CmdLine, Dir: string; var Output: string;
      var dwExitCode: Cardinal): Boolean; overload;
    {* 用管道方式在 Dir 目录执行 CmdLine,Output 返回输出信息,
       dwExitCode 返回退出码。如果成功返回 True }
       
       ---
    // 运行一个文件并立即返回
    function WinExecute(FileName: string; Visibility: Integer = SW_NORMAL): Boolean;
    var
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
    begin
      FillChar(StartupInfo, SizeOf(StartupInfo), #0);
      StartupInfo.cb := SizeOf(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := Visibility;
      Result := CreateProcess(nil, PChar(FileName), nil, nil, False,
        CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo,
        ProcessInfo);
    end;

    // 运行一个文件并等待其结束
    function WinExecAndWait32(FileName: string; Visibility: Integer;
      ProcessMsg: Boolean): Integer;
    var
      zAppName: array[0..512] of Char;
      zCurDir: array[0..255] of Char;
      WorkDir: string;
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
    begin
      StrPCopy(zAppName, FileName);
      GetDir(0, WorkDir);
      StrPCopy(zCurDir, WorkDir);
      FillChar(StartupInfo, SizeOf(StartupInfo), #0);
      StartupInfo.cb := SizeOf(StartupInfo);

      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := Visibility;
      if not CreateProcess(nil,
        zAppName,                           { pointer to command line string }
        nil,                                { pointer to process security attributes }
        nil,                                { pointer to thread security attributes }
        False,                              { handle inheritance flag }
        CREATE_NEW_CONSOLE or               { creation flags }
        NORMAL_PRIORITY_CLASS,
        nil,                                { pointer to new environment block }
        nil,                                { pointer to current directory name }
        StartupInfo,                        { pointer to STARTUPINFO }
        ProcessInfo) then
        Result := -1                        { pointer to PROCESS_INF }
      else
      begin
        if ProcessMsg then
        begin
          repeat
            Application.ProcessMessages;
            GetExitCodeProcess(ProcessInfo.hProcess, Cardinal(Result));
          until (Result <> STILL_ACTIVE) or Application.Terminated;
        end
        else
        begin
          WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
          GetExitCodeProcess(ProcessInfo.hProcess, Cardinal(Result));
        end;
      end;
    end;

    // 用管道方式在 Dir 目录执行 CmdLine,Output 返回输出信息,
    // dwExitCode 返回退出码。如果成功返回 True
    function WinExecWithPipe(const CmdLine, Dir: string; slOutput: TStrings;
      var dwExitCode: Cardinal): Boolean;
    var
      HOutRead, HOutWrite: THandle;
      StartInfo: TStartupInfo;
      ProceInfo: TProcessInformation;
      sa: TSecurityAttributes;
      InStream: THandleStream;
      strTemp: string;
      PDir: PChar;

      procedure ReadLinesFromPipe(IsEnd: Boolean);
      var
        s: string;
        ls: TStringList;
        i: Integer;
      begin
        if InStream.Position < InStream.Size then
        begin
          SetLength(s, InStream.Size - InStream.Position);
          InStream.Read(PChar(s)^, InStream.Size - InStream.Position);
          strTemp := strTemp + s;
          ls := TStringList.Create;
          try
            ls.Text := strTemp;
            for i := 0 to ls.Count - 2 do
              slOutput.Add(ls[i]);
            strTemp := ls[ls.Count - 1];
          finally
            ls.Free;
          end;
        end;

        if IsEnd and (strTemp <> '') then
        begin
          slO

  • 相关阅读:
    科普文,无论在哪选配计算机,都要懂得常识 (任务5)
    任务5 配机网站关注热点解读
    科普文,解析品牌机的配置特点,选配计算机可以这么做(任务4)
    任务4 解析品牌机配置
    立足于应用需求,看到整体性能,评价计算机的性能(任务3)
    科普文,分享计算机优化的套路,停掉不需要的进程(任务3)
    任务3对电脑进行评价,硬件健康,性能测试, WINDOWS体验指数
    任务2认知计算机系统(计算机系统是一个生态系统,分为硬件系统和软件系统,互为支撑)
    数据库程序接口——JDBC——API解读第一篇——建立连接的核心对象
    数据库程序接口——JDBC——API解读第二篇——执行SQL的核心对象
  • 原文地址:https://www.cnblogs.com/zhusd/p/1766986.html
Copyright © 2011-2022 走看看