rt

解决方案 »

  1.   

    Function {TCustomExecExtApp.}Execute(ComLine : String):boolean;
    var
      FAppHandle : THandle;
      lpAppName : pchar;
      lpTitle : Pchar;
      StartInfo : TStartupInfo;
      FProcessInfo : TProcessInformation;
    begin
      if (Length(ComLine)+2)>255 then
      begin
        SetError(-1,'Command Line Too Long!');
        Result := false;
        exit;
      end;  GetMem(lpAppName,MaxPath);
      GetMem(lpTitle,MaxPath);  StrPCopy(lpAppName,ComLine);
      StrPCopy(lpTitle,ComLine);
      //init StartInformation
      StartInfo.cb:=sizeof(TStartupInfo);
           StartInfo.lpReserved := NIL;
             StartInfo.lpDesktop:=NIL;
              StartInfo.lpTitle := lpTitle;
      StartInfo.dwFillAttribute := 0;
          StartInfo.cbReserved2 :=0;
          StartInfo.lpReserved2 := NIL;
      //这个参数控制Create Window形态
      //STARTF_USESHOWWINDOW 指定这个标志位,指示用ShowWindow的参数建立窗口
              StartInfo.dwFlags := STARTF_USESHOWWINDOW;
          StartInfo.wShowWindow := FWinStyle;  //CreateProcess 在Windows.pas中的一个原形
      //function CreateProcessA(lpApplicationName: PAnsiChar; lpCommandLine: PAnsiChar;
      //lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
      //bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
      //lpCurrentDirectory: PAnsiChar; const lpStartupInfo: TStartupInfo;
      //var lpProcessInformation: TProcessInformation): BOOL; stdcall;  //Clear ProcessInfo Structure
      FProcessInfo.hProcess := 0;
      FProcessInfo.hThread := 0;
      FProcessInfo.dwProcessId := 0;
      FProcessInfo.dwThreadId := 0;  //Create process
      if CreateProcess(NIL,
                      lpAppName,
                      nil,
                      nil,
                      False,
                      0,
                      nil,
                      nil,
                      StartInfo,
                      FProcessInfo) then
      begin //Command Executed
        //为进程建立可查询的属性。
        FAppHandle := OpenProcess(PROCESS_QUERY_INFORMATION,False,FProcessInfo.dwProcessId);
        //建立可查询的属性后可用于GetExitCodeProcess,在Delphi中查询外部程序是
        //否还在运行,这个函数在W95,W98,NT40下均可用.
        //注意:FAppHandle要改成Form的变量,以便其它函数可以使用.
        //  GetExitCodeProcess(FAppHandle,FAppState);
        // if FAppState<>STILL_ACTIVE then
        //      外部程序已结束
        //   else
        //      外部程序还在运行
      end
      else //false Create Process;
      begin
        SetError(-2,'Can not create process!');
        Result := false;
      end;  FreeMem(lpAppName);
      FreeMem(lpTitle);
    end;
      

  2.   

    to qiujsh(四大皆空) :出现一个问题:
    [Error] P_main.pas(135): Undeclared identifier: 'FWinStyle'
    不知道该怎么解决...
      

  3.   

    FWinStyle是个参数,同ShowWindow里的参数,SW_SHOW