Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi warten bis anwendung gestartet wird... (https://www.delphipraxis.net/52806-warten-bis-anwendung-gestartet-wird.html)

agm65 4. Sep 2005 12:24


warten bis anwendung gestartet wird...
 
hallo leute, hab da mal ne frage...
also ich möchte, dass mein progg wartet bis zB der IE geöffnet wird und dann sollen erst meine funktionen ausgeführt werden...geht sowas? also ich könne ja checken lasses ob die iexplorer.exe bereits ausgeführt ist und dann erst loslegen. dachte vielleicht gibts dafür ne function.. ? thx cu agm65

Mr_G 4. Sep 2005 12:31

Re: warten bis anwendung gestartet wird...
 
Vielleicht hilft dir das hier:
Delphi-Quellcode:
uses ..., tlhelp32 ...
function GetProcessID(sProcName: String): Integer;
  var
    hProcSnap: THandle;
    pe32: TProcessEntry32;
  begin
    result := -1;
    hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
    if hProcSnap = INVALID_HANDLE_VALUE then exit;

    pe32.dwSize := SizeOf(ProcessEntry32);

    //wenn es geklappt hat
    if Process32First(hProcSnap, pe32) = true then
      //Prozess suchen
      while Process32Next(hProcSnap, pe32) = true do
      begin
        if pos(sProcName, pe32.szExeFile) <> 0 then
          result := pe32.th32ProcessID;
      end;
    CloseHandle(hProcSnap);
  end;
Ich glaue ich habs sogar hier aus dem Forum...

Olli 4. Sep 2005 12:58

Re: warten bis anwendung gestartet wird...
 
Hier im Forum suchenShellExecuteAndWait (Direktlink) tut's auch. Einziges Problem: du weißt nie genau ab wann das Programm auch wirklich komplett geladen ist. Mit beiden Methoden nicht.

@Mr_G: Auf NT4 wird das nicht gehen ;)

SirThornberry 4. Sep 2005 13:03

Re: warten bis anwendung gestartet wird...
 
@Mr_G: außerdem müsstest du eine repeat-until-scheilfe nehmen da du sonst den ersten prozess den du bereits mit Process32Fist überspringst bei der Prüfung

Christian Seehase 4. Sep 2005 13:12

Re: warten bis anwendung gestartet wird...
 
Moin Olli,

Zitat:

Zitat von Olli
Einziges Problem: du weißt nie genau ab wann das Programm auch wirklich komplett geladen ist.

und wenn Du jetzt mal WaitForSingleObject durch WaitForInputIdle austauschst?
Letzteres ist ja schliesslich genau dafür da zu warten, bis der Prozess auf anwenderseitige Eingaben wartet.

agm65 4. Sep 2005 13:15

Re: warten bis anwendung gestartet wird...
 
danke jungs ich werde das heute abend mal testen ...

SirThornberry 4. Sep 2005 13:19

Re: warten bis anwendung gestartet wird...
 
@Christian Seehase: Das ist trotzdem nicht eindeutig. Grund sind da die bösen Programmierer von diversen Programmen. Hat man zum Beispiel einen Splashscreen und aktuallisiert den mit Application.ProcessMessages so werden die ersten Nachrichten abgearbeitet und für Windows müsste es so aussehen als ob das Programm jetzt fertig geladen ist und auf nutzereingaben wartet.

Olli 4. Sep 2005 13:19

Re: warten bis anwendung gestartet wird...
 
Zitat:

Zitat von Christian Seehase
und wenn Du jetzt mal WaitForSingleObject durch WaitForInputIdle austauschst?
Letzteres ist ja schliesslich genau dafür da zu warten, bis der Prozess auf anwenderseitige Eingaben wartet.

Ja, ist prinzipiell natürlich möglich. Aber die Einschränkung beachten:
Zitat:

If this process is a console application or does not have a message queue, WaitForInputIdle returns immediately.
Beim IE müßte es aber gehen, denke ich.

Mr_G 4. Sep 2005 13:22

Re: warten bis anwendung gestartet wird...
 
Zitat:

Zitat von SirThornberry
@Mr_G: außerdem müsstest du eine repeat-until-scheilfe nehmen da du sonst den ersten prozess den du bereits mit Process32Fist überspringst bei der Prüfung

Ich versteh nicht was du mir sagen willst...

P.S.: Hab mich nicht wirklich damit auseinander gesetzt. :oops: War nur eine Function die im Rahmen des Prozessekillens brauchte...

SirThornberry 4. Sep 2005 13:23

Re: warten bis anwendung gestartet wird...
 
woran macht dann die funktion WaitForInputIdle intern fest ob die Anwendung fertig ist? Ich hätte gedacht das dies der fall ist sobald die erste message abgearbeitet ist, aber wenn keine message queue vorhanden wäre würde es nach meiner Theorie ewig warten.

@Mr_G:
Delphi-Quellcode:
if Process32First(hProcSnap, pe32) = true then
   //An dieser Stelle wurde bereits der erste prozess in pe32 eingelesen
   while Process32Next(hProcSnap, pe32) = true do //un hier liest du schon den nächsten prozess in pe32 ein. Wenn du also nach dem ersten aufruf (Process32First) in pe32.szExeFile den richtigen Namen hast wird dieser einfach ignoriert und nie gefunden


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 Uhr.
Seite 1 von 3  1 23      

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