• 让程序后台隐藏运行


    function exec_cmd_line(const sCmd: AnsiString; var nExitCode: Cardinal; nDefWaitTime: Cardinal = 10 * 1000): string;
    
    //const
    //  aExitCode_CreateProcessError = 222;
    
    var
      si: TStartupInfoA;
      pi: TProcessInformation;
    
      //aCurrDir: string;
    
      //aRet: Cardinal;
    
    
    begin
    
    
      FillChar(si, SizeOf(si), #0);
      FillChar(pi, SizeOf(pi), #0);
    
    //  Windows.GetStartupInfo(si);
      si.cb := SizeOf(si);
      si.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
      si.wShowWindow := SW_HIDE;
    
    
    //BOOL WINAPI CreateProcess(
    //  LPCTSTR lpApplicationName,
    //  LPTSTR lpCommandLine,
    //  LPSECURITY_ATTRIBUTES lpProcessAttributes,
    //  LPSECURITY_ATTRIBUTES lpThreadAttributes,
    //  BOOL bInheritHandles,
    //  DWORD dwCreationFlags,
    //  LPVOID lpEnvironment,
    //  LPCTSTR lpCurrentDirectory,
    //  LPSTARTUPINFO lpStartupInfo,
    //  LPPROCESS_INFORMATION lpProcessInformation
    //);
    
      if Windows.CreateProcessA(
        nil, // LPCTSTR lpApplicationName, // pointer to name of executable module
        PAnsiChar(sCmd), //LPTSTR lpCommandLine,  // pointer to command line string
        nil, //LPSECURITY_ATTRIBUTES lpProcessAttributes,  // pointer to process security attributes
        nil, //LPSECURITY_ATTRIBUTES lpThreadAttributes,  // pointer to thread security attributes
        True, //BOOL bInheritHandles,  // handle inheritance flag
        0, //DWORD dwCreationFlags,  // creation flags
        nil, //LPVOID lpEnvironment,  // pointer to new environment block
        nil, //LPCTSTR lpCurrentDirectory,  // pointer to current directory name
        si, //LPSTARTUPINFO lpStartupInfo,  // pointer to STARTUPINFO
        pi //LPPROCESS_INFORMATION lpProcessInformation   // pointer to PROCESS_INFORMATION
        ) then begin
    
        if Windows.WaitForInputIdle(pi.hProcess, INFINITE) <> 0 then begin
    
        end;
    
        if Windows.WaitForSingleObject(pi.hProcess, nDefWaitTime) = Windows.WAIT_TIMEOUT then
          Windows.TerminateProcess(pi.hProcess, Windows.WAIT_TIMEOUT);
    
        Windows.GetExitCodeProcess(pi.hProcess, nExitCode);
    
      end
      else begin
        nExitCode := GetLastError;
      end;
    
      //nExitCode := nExitCode mod 256;
    
    end;

    http://bbs.2ccc.com/topic.asp?topicid=503890

  • 相关阅读:
    Linux_23 DNS 正向解析区域、反向解析区域;主/从;子域;基本安全控制
    Linux_22 加密和解密及OpenSSL
    Linux_21 日志系统、ssh服务、系统安装及系统故障排除
    Linux_20 子网划分
    Akavache简明使用指南
    Oracle存储过程解析XML内容
    docker部署微服务不支持中文字体的解决方案
    Three.js
    Three.js
    [Linux] vim状态栏配置
  • 原文地址:https://www.cnblogs.com/findumars/p/6116011.html
Copyright © 2020-2023  润新知