1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| //==============================================================================
//=== Lance une application et retourne le process ID
//==============================================================================
Function StartAndGetProcessID(Command: String): DWord;
Var
lpsaProcess: PSecurityAttributes;
lpsaThread: PSecurityAttributes;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
AddrCmd: Array[0..255] Of Char;
ReturnValue: BOOL;
Begin
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
With StartupInfo Do
Begin
cb := SizeOf(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := SW_SHOW;
End;
New(lpsaProcess);
New(lpsaThread);
Try
lpsaProcess^.nLength := SizeOf(lpsaProcess^);
lpsaProcess^.lpSecurityDescriptor := Nil;
lpsaProcess^.bInheritHandle := True;
lpsaThread^.nLength := SizeOf(lpsaThread^);
lpsaThread^.lpSecurityDescriptor := Nil;
lpsaThread^.bInheritHandle := True;
StrPCopy(AddrCmd, Command);
ReturnValue := CreateProcess(Nil, AddrCmd, lpsaProcess, lpsaThread, False,
0, Nil, Nil, StartupInfo, ProcessInfo);
Finally
Dispose(lpsaProcess);
Dispose(lpsaThread);
End;
result := 0;
If ReturnValue Then
Begin
result := ProcessInfo.dwProcessId;
SEtThreadIdealProcessor(ProcessInfo.hThread,0);
End;
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
End; |
Partager