AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Problem ShellExecute / CreateProcess + Wait mit Vista UAC

Problem ShellExecute / CreateProcess + Wait mit Vista UAC

Ein Thema von Assertor · begonnen am 14. Mai 2007 · letzter Beitrag vom 9. Sep 2011
Antwort Antwort
Seite 2 von 5     12 34     Letzte » 
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
229 Beiträge
 
Delphi 10.3 Rio
 
#11

Re: Problem ShellExecute / CreateProcess + Wait mit Vista UA

  Alt 17. Feb 2009, 10:24
Zitat:
ShExecInfo: SHELLEXECUTEINFO;
Das liefe dann aber nicht mehr unter Windows 98/ME etc, die noch nicht unicode-kompatibel sind.
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

Re: Problem ShellExecute / CreateProcess + Wait mit Vista UA

  Alt 17. Feb 2009, 10:37
jupp, hatte ich auch schon germerkt

dann aber zumindestens noch 'ne Version, die mit dem arbeitet, was Delphi kann:
(bis D2007 in ANSI und ab WinNT und D2009 in Unicode)
Delphi-Quellcode:
function ExecAndWait(Filename, Params: String;
                     WindowState: Word = SW_SHOWNORMAL): boolean;
var
  {$IFDEF UNICODE} ShExecInfoW: SHELLEXECUTEINFOW; {$ENDIF}
  ShExecInfoA: SHELLEXECUTEINFOA;
// MSDN: ShellExecuteEx, ShellExecuteInfo
begin
  Result := false;
  if (Filename = '') or not FileExists(FileName) then
    exit;
  {$IFDEF UNICODE}
  if Win32IsUnicode then
  begin
    ShExecInfoW.Wnd := GetForegroundWindow;
    ShExecInfoW.cbSize := SizeOf(SHELLEXECUTEINFOW);
    ShExecInfoW.fMask := SEE_MASK_NOCLOSEPROCESS;
    ShExecInfoW.lpVerb := 'open';
    ShExecInfoW.lpFile := PWideChar(WideString(Filename));
    ShExecInfoW.lpParameters := PWideChar(WideString(Params));
    ShExecInfoW.lpDirectory := PWideChar(WideString(ExtractFileDir(Filename)));
    ShExecInfoW.nShow := WindowState;
    Result := ShellExecuteExW(@ShExecInfoW);
    try
      if Result then WaitForSingleObject(ShExecInfoW.hProcess, INFINITE);
    finally
      CloseHandle(ShExecInfoW.hProcess);
    end;
  end
  else
  {$ENDIF}
  begin
    ShExecInfoA.Wnd := GetForegroundWindow;
    ShExecInfoA.cbSize := sizeof(SHELLEXECUTEINFOA);
    ShExecInfoA.fMask := SEE_MASK_NOCLOSEPROCESS;
    ShExecInfoA.lpVerb := 'open';
    ShExecInfoA.lpFile := PAnsiChar(AnsiString(Filename));
    ShExecInfoA.lpParameters := PAnsiChar(AnsiString(Params));
    ShExecInfoA.lpDirectory := PAnsiChar(AnsiString(ExtractFileDir(Filename)));
    ShExecInfoA.nShow := WindowState;
    Result := ShellExecuteExA(@ShExecInfoA);
    try
      if Result then WaitForSingleObject(ShExecInfoA.hProcess, INFINITE);
    finally
      CloseHandle(ShExecInfoA.hProcess);
    end;
  end;
end;
[edit] noch schnell ein {$IFDEF UNICODE} eingefügt ... wenn Delphi eh standardmäßig kein Unicode kann, braucht man den Code ja hierbei nicht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
229 Beiträge
 
Delphi 10.3 Rio
 
#13

Re: Problem ShellExecute / CreateProcess + Wait mit Vista UA

  Alt 17. Feb 2009, 10:55
Nu isses perfekt!
Stefan
  Mit Zitat antworten Zitat
Jester101

Registriert seit: 3. Dez 2007
2 Beiträge
 
#14

Re: Problem ShellExecute / CreateProcess + Wait mit Vista UA

  Alt 2. Mai 2009, 13:21
Hallo,

wie kann ich die Parameter auslesen, die das auszuführende Programm nach Ausführung zurückgibt?

Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.628 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#15

Re: Problem ShellExecute / CreateProcess + Wait mit Vista UA

  Alt 2. Mai 2009, 13:34
Was für Parameter meinst du? ExitCode? Handle?
  Mit Zitat antworten Zitat
Jester101

Registriert seit: 3. Dez 2007
2 Beiträge
 
#16

Re: Problem ShellExecute / CreateProcess + Wait mit Vista UA

  Alt 2. Mai 2009, 14:23
ExitCode denke ich. Das externe Programm führt eine Berechnung durch und gibt eine 1 zurück wenn alles ok ist und eine andere Zahl, wenn ein Fehler auftritt (die Zahl entspricht dann dem auszugebenden Error Code). Nur falls eine 1 ausgegeben wird, soll das ursprüngliche Programm (von dem das externe Programm gestartet wurde) weiterlaufen. Wenn ich es richtig verstanden habe, dann bräuchte ich ein Handle doch nur, um aus dem startenden Programm bei dem externen Programm zur Laufzeit Veränderung etc. durchzuführen.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.628 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#17

Re: Problem ShellExecute / CreateProcess + Wait mit Vista UA

  Alt 2. Mai 2009, 14:44
Hast du das externe Programm selbst geschrieben? Wenn du wirklich den ExitCode meinst, ist das eine komische Verwendung. Normalerweise wird dein Programm mit ExitProcess(0) << ExitCode 0 beendet, um zu signalisieren, dass alles korrekt beendet wurde. ExitCode 1 bedeutet, dass ein Fehler aufgetreten ist.

Naja guck dir mal die MSDN-Library durchsuchenGetExitCodeProcess API an. Vielleicht ist es ja das was du suchst.
  Mit Zitat antworten Zitat
shadowman

Registriert seit: 1. Nov 2005
48 Beiträge
 
#18

Re: Problem ShellExecute / CreateProcess + Wait mit Vista UA

  Alt 31. Mai 2009, 09:16
Hallo zusammen,
im Bezug auf die Antwort #12 hier im Thread and ein paar davor habe ich einige Fragen:

Was findet man in "ShExecInfoA.hProcess" wieder? Ist es die Prozess-ID?
Wenn ja: ist es die, die auch im Taskmanager angezeigt wird?

Ich bekomme nämlich zwei unterschriedliche als Ergebnis.
Wenn die gleich sein müssten: was könnte da falsch laufen?
Wenn "ShExecInfoA.hProcess" nicht die Prozess-ID darstellt: wie komme ich an diese dran?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Problem ShellExecute / CreateProcess + Wait mit Vista UA

  Alt 31. Mai 2009, 10:59
Wie das Präfix h andeutet, handelt es sich um ein Prozess-Handle. Ab Windows XP SP 1 kommst du mit MSDN-Library durchsuchenGetProcessId vom Handle auf die ID.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
shadowman

Registriert seit: 1. Nov 2005
48 Beiträge
 
#20

Re: Problem ShellExecute / CreateProcess + Wait mit Vista UA

  Alt 1. Jun 2009, 13:12
Danke für die Antwort!

Die Verwendung von GetProcessId scheint allerdings problematisch zu sein, da es diese Funktion eerst ab XP SP1 gibt.

Habe noch das hier gefunden: GetWindowThreadProcessId, aber auch danach habe ich zwei unterschiedliche Werte.

Gibt es denn keine andere Möglichkeit vom Handle zu ProzessID zu gelangen?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf