AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Process starten und handle bekommen
Thema durchsuchen
Ansicht
Themen-Optionen

Process starten und handle bekommen

Ein Thema von perle · begonnen am 8. Nov 2004 · letzter Beitrag vom 26. Feb 2012
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#1

AW: Process starten und handle bekommen

  Alt 24. Feb 2012, 21:03
nein - 32 Bit

Ich hab mir jetzt mal die Variablen anschaut, die übergeben werden müssen, und da viel mir auf, dass der Dateiname als erstes übergeben werden muss

Also so:

if CreateProcess(PChar(FileName), nil, nil, nil, False, 0, nil, nil, SI, PI) then Und dann gehts...



[edit]

... doch nicht!

Leider funktioniert dann der Vergleich der ProcessId nicht mehr

Delphi-Quellcode:
         if PI.dwProcessId = ProcessId then
           begin
             Result := Longint(List.Items[I]);
             Break;
           end;
[Edit2]

Das erste Edit war falsch! - es funktioniert doch - nur darf der Process nicht schon laufen
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (24. Feb 2012 um 21:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#2

AW: Process starten und handle bekommen

  Alt 24. Feb 2012, 22:09
Muß nicht der erste Parameter sein.

Ist das erste NIL, dann wird das Zweite als CommandLine verwendet (so wie man es im Start-Menü > Ausführen oder in der Konsole eingeben kann).

Aber, ich vermute mal (hab nachgelesen )

Zitat von der zweite Paramweter:
The Unicode version of this function, CreateProcessW, can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation.

The lpCommandLine parameter can be NULL. In that case, the function uses the string pointed to by lpApplicationName as the command line.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (24. Feb 2012 um 22:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.919 Beiträge
 
Delphi 12 Athens
 
#3

AW: Process starten und handle bekommen

  Alt 25. Feb 2012, 08:34
Du darfst nicht PChar(FileName) nutzen, sondern z.B. PChar(FileName + ''), dann geht es.
Das Thema gab es schon ein paarmal, das war meine einfache Lösung, geht auch "schöner".
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#4

AW: Process starten und handle bekommen

  Alt 25. Feb 2012, 08:53
Delphi-Referenz durchsuchenUniqueString oder SetLength(S, Length(S)); würde direkt die Daten des Strings anpassen.

Bei + '' würde ich vielleicht noch aufpassen, nicht daß die Codeoptimierung mal auf die Idee kommt das wegzuoptimieren.
Hier wäre ein + #0 wohl besser, auch wenn es eigentlich (von den Stringdaten her) nicht nötig wäre, aber wenigstens sorgt es dafür daß der String unique/eindeutig wird und vorallem beschreibbar im RAM liegt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Process starten und handle bekommen

  Alt 25. Feb 2012, 10:11
Aber was würde dagegen sprechen, den ersten Parameter zu beschreiben, anstatt den zweiten?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#6

AW: Process starten und Handle bekommen

  Alt 25. Feb 2012, 10:38
Nix, ist vollkommen OK.

Beides geht, wie man es braucht.
Das Erste ist der Programmpfad oder das Zweite stellt eine Kommandozeile dar.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
HiWieGehts

Registriert seit: 19. Aug 2005
101 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Process starten und handle bekommen

  Alt 26. Feb 2012, 08:35
Hallo,

muss zu dem Thema eine vielleicht blöde Frage stellen:
CreateProcess liefert in PROCESS_INFORMATION das Handle "hProcess". Ist das nicht das gesuchte Handle? Hier die Definition von PROCESS_INFORMATION.
Delphi-Quellcode:
  PROCESS_INFORMATION = record
    hProcess: THandle;
    hThread: THandle;
    dwProcessId: DWORD;
    dwThreadId: DWORD;
  end;
Wenn nicht, was ist der Unterschied?
LG, HiWieGehts
  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 22:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz