我是很菜的了,希望大家帮忙,最好有个例子
想要达到的效果是,用winexec调用一个16位程序的过程中,原窗口处于disable状态,待所调用的16位程序结束后,该窗口又变为enable的了,不知如何实现,请大家不吝多多指点

解决方案 »

  1.   

    //执行外部程序并等他结束
    function WinExecAndWait32(FileName: string; Visibility: Integer): Cardinal; //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, nil, nil, True, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
        nil, nil, StartupInfo, ProcessInfo) then
        Result := INFINITE
      else begin
        WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
        GetExitCodeProcess(ProcessInfo.hProcess, Result);
        CloseHandle(ProcessInfo.hProcess);
        CloseHandle(ProcessInfo.hThread);
      end;
    end;
      

  2.   

    用CreateProcess()调用16位程序,
    然后用WaitForSingleObject()等待16位程序结束即可
      

  3.   

    也可以用winexec调用一个16位程序,
    再用FindWindow()获取16位程序的句柄,
    然后用WaitForSingleObject()等待16位程序结束即可