| Hej NG
 
 Jeg har fundet nedenstående 'dims' på en NewsGroup under Borland.
 
 Det er meningen, at funktionen skal kalde et program og vente til dette
 program er færdig, før mit program fortsætter sin afvikling.
 
 Det har endnu virket på alle programmer med undtagelse af  "Setup.exe" fra
 InstallShield og det er netop dette program, jeg skal bruge funktionen til.
 
 Når jeg er i Delphi og kalder funktionen via et testprogram, sker der ikke
 noget, lige med undtagelse, at mit program låses i funktionens
 Repeatfunktion og "Setup.exe" starter ikke.
 Trykker jeg herefter på Ctrl/F2 i Delphi startes "Setup.exe", som
 tilsyneladende har ligger og 'lusket' i baggrunden.
 
 Er der en af jer, som kan gi' mig en forklaring, for der hjælper heller ikke
 at aktivere min egen Exe-fil direkte dvs. udenom Delphi.
 
 På for hånd tak
 PL
 
 Function RunExecutable(FileName : String; Visibility : integer; TimeOut :
 LongWord): DWORD;
 Procedure WaitFor( processHandle: THandle );
 Var
 msg: TMsg;
 ret: DWORD;
 Begin
 Repeat
 ret := MsgWaitForMultipleObjects(
 1,             { 1 handle to wait on }
 processHandle, { the handle }
 False,         { wake on any event }
 INFINITE,      { wait without timeout }
 QS_PAINT or    { wake on paint messages }
 QS_SENDMESSAGE { or messages from other threads }
 );
 If ret = WAIT_FAILED Then Exit; { can do little here }
 If ret = (WAIT_OBJECT_0 + 1) Then Begin
 { Woke on a message, process paint messages only. Calling
 PeekMessage gets messages send from other threads processed.
 }
 {          While PeekMessage( msg, 0, WM_PAINT, WM_PAINT, PM_REMOVE ) Do
 DispatchMessage( msg );}
 End;
 Until ret = WAIT_OBJECT_0;
 End; { Waitfor }
 Var  { V1 by Pat Ritchey, V2 by P.Below }
 zAppName:array[0..512] of char;
 StartupInfo:TStartupInfo;
 ProcessInfo:TProcessInformation;
 Begin { WinExecAndWait32V2 }
 StrPCopy(zAppName,FileName);
 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)          { pointer to PROCESS_INF }
 Then
 Result := DWORD(-1)   { failed, GetLastError has error code }
 Else Begin
 Waitfor(ProcessInfo.hProcess);
 GetExitCodeProcess(ProcessInfo.hProcess, Result);
 CloseHandle( ProcessInfo.hProcess );
 CloseHandle( ProcessInfo.hThread );
 End; { Else }
 End; { WinExecAndWait32V2 }
 
 
 
 
 
 
 |