delphi – 使用’CreateProcess’隐藏流程窗口

我正在使用提供给我的程序,它将运行一个进程,但我希望该进程在后台运行而不显示窗口.电话是
ExecProcess(ProgPath,'',False);

而且功能

function ExecProcess(ProgramName,workdir: string; Wait: boolean): integer;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessinformation;
  CreateOK: boolean;
  ExitCode: integer;
  dwExitCode: DWORD;
begin
  ExitCode := -1;

  FillChar(StartInfo,SizeOf(TStartupInfo),#0);
  FillChar(ProcInfo,SizeOf(TProcessinformation),#0);
  StartInfo.cb := SizeOf(TStartupInfo);

  if workdir <> '' then
  begin
    CreateOK := CreateProcess(nil,Addr(ProgramName[1]),nil,Addr(workdir[1]),false,CREATE_NEW_PROCESS_GROUP or norMAL_PRIORITY_CLASS,StartInfo,ProcInfo);
  end
  else
  begin
    CreateOK := CreateProcess(nil,ProcInfo);
  end;

  { check to see if successful }

  if CreateOK then
  begin
    // may or may not be needed. Usually wait for child processes
    if Wait then
    begin
      WaitForSingleObject(ProcInfo.hProcess,INFINITE);
      GetExitCodeProcess(ProcInfo.hProcess,dwExitCode);
      ExitCode := dwExitCode;
    end;
  end
  else
  begin
    ShowMessage('Unable to run ' + ProgramName);
  end;

  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);

  Result := ExitCode;

end;

我试图使用SW_MINIMIZE,SW_FORCEMINIMIZE和SW_SHOWMINIMIZED的StartInfo.wShowWindow属性,但它无法正常工作.我可以看到调试器中的属性正在发生变化,但就像我现在所理解的那样.有人能指出问题是什么吗?

编辑:如果重要我正在执行一些Fortran模块(.exe),其参数将打开一个CMD窗口.

解决方法

使用带有STARTF_USESHOWWINDOW的dwFlags强制使用wShowWindow
StartInfo.wShowWindow := SW_HIDE;
StartInfo.dwFlags := STARTF_USESHOWWINDOW;

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...