AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ProcessID nach Programmstart

Ein Thema von hanspeter · begonnen am 19. Mär 2009 · letzter Beitrag vom 19. Mär 2009
Antwort Antwort
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

ProcessID nach Programmstart

  Alt 19. Mär 2009, 09:25
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
  Mit Zitat antworten Zitat
_BlackDragon_

Registriert seit: 4. Dez 2007
Ort: Eschweiler
64 Beiträge
 
#2

Re: ProcessID nach Programmstart

  Alt 19. Mär 2009, 12:10
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
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#3

Re: ProcessID nach Programmstart

  Alt 19. Mär 2009, 13:13
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:04 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