Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ProcessID nach Programmstart (https://www.delphipraxis.net/131123-processid-nach-programmstart.html)

hanspeter 19. Mär 2009 09:25


ProcessID nach Programmstart
 
Hallo,

Ich starte eine Exe über nachfolgende Anweisung:

Delphi-Quellcode:
procedure TTaskControler.Start(ExeName, Parameter, Caption: string);
var
  t : TTaskCntrl;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  t := TTaskCntrl.Create;
  TaskLst.Add(t);
  t.ExeName := ExtractFileName(ExeName);
  t.Caption := Caption;
  FillChar(StartupInfo, SizeOf(TStartupInfo),0);
  StartupInfo.cb:=SizeOf(TStartupInfo);
  StartupInfo.dwFlags    := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := 0;
{$D-}
  if CreateProcess(nil,PChar(ExeName + ' ' + Parameter),nil,nil,false,
      CREATE_NEW_CONSOLE or
      NORMAL_PRIORITY_CLASS
      ,nil,nil,startupinfo,ProcessInfo) then
  begin
   t.ProcessHdl := ProcessInfo.hProcess;
   t.ProcessID := ProcessInfo.dwProcessId;
   t.WindowHdl := FindWindowByProcessId(t.ProcessID);

  end;
{$D+}
end;
Nach CreateProcess möchte ich die ProcessID und das Programmhandle auslesen.
Die ProcessID scheint nicht zu stimmen.
Mit der Jedi-Funktion GetPidFromProcessName bekomme ich eine andere ID zurück.
Was mache ich falsch ?

Gru0
Peter

_BlackDragon_ 19. Mär 2009 12:10

Re: ProcessID nach Programmstart
 
Hi,

sollte eigentlich so funktionieren. :?:

Was sagt den der Taskmanager oder besser der ProcessExplorer von SysInternals ?

Du solltest das Prozess-Handle am Schluss freigeben. Wenn du zwischenzeitlich ein Handle brauchst, dann
kannst du das Handle des Prozesses über OpenProcess holen.

Gruß

BlackDragon

hanspeter 19. Mär 2009 13:13

Re: ProcessID nach Programmstart
 
Zitat:

Zitat von _BlackDragon_
Hi,

sollte eigentlich so funktionieren. :?:

Ich verwende Winspy, das zeigt andere Werte an.
Die Handel gebe ich an anderer Stelle in einem Thread frei. Ich kann die Exe modal oder als MDI starten.
Ein Task überwacht das Programmende und stellt dann Exitcode bereit und gibt die Handles frei.
Inzwischen habe ich aber gemerkt, das hier wohl ein Timing Problem mitspielt.
Ich hole über die ProzessID das Fensterhandle. Das muss jedoch zeitlich verzögert erfolgen.

Gruß
Peter


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz