Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ShellExecute und IsWindowVisible (https://www.delphipraxis.net/70743-shellexecute-und-iswindowvisible.html)

Martin K 3. Jun 2006 22:33


ShellExecute und IsWindowVisible
 
Hi,

laut der Windows SDK Hilfe bekomme ich bei ShellExecute das Handle zurückgeliefert.
Mit IsWindowVisible sollte man prüfen können, ob das Fenster zu dem Handle sichtbar ist.

Folgender Code funzt leider nicht wie er soll :cry: und ich habe keine Ahnung warum:
Delphi-Quellcode:
var i: HWND;
{...}
  i := ShellExecute(Handle, 'open', 'notepad.exe', nil, nil, 1);
  while IsWindowVisible(i) do
    Application.ProcessMessages;
  ShowMessage('notepad wurde beendet.');
Es wird gleich die Message angezeigt, obwohl das Notepad noch geöffnet ist.

Was mache ich falsch?
:gruebel:

Dax 3. Jun 2006 22:37

Re: ShellExecute und IsWindowVisible
 
ShellExecute gibt kein Fensterhandle zurück! :warn: Wenn du ein Fensterhandle willst, musst du mit CreateProcess arbeiten und durch die Fenster des Prozesses iterieren, bis du das gefunden hast, das du wolltest.. :gruebel:

Martin K 3. Jun 2006 22:39

Re: ShellExecute und IsWindowVisible
 
Zitat:

Zitat von Dax
ShellExecute gibt kein Fensterhandle zurück! :warn:

Öhmmm....

Dann hab ich das wohl falsch verstanden:
Zitat:

Return Values

If the function succeeds, the return value is the instance handle of the application that was run, or the handle of a dynamic data exchange (DDE) server application.
Was heißt das denn dann???

Dax 3. Jun 2006 22:52

Re: ShellExecute und IsWindowVisible
 
Instance Handle != Fensterhandle! Ein Fensterhandle beschreibt ein Fenster, ein Instazhandle beschreibt einen laufenden Prozess (wobei der Rückgabewert von ShellExecute eh nur für fehlerchecks zu gebrauchen ist). Handle deines Fensters in Delphi: Self.Handle. Damit kannst du dein Fenster verstecken usw. Instance Handle: hInstance! Damit kannst du dir (nötige Rechte vorrausgesetzt) Debug-Priviliegien auf deinen Prozess holen, sowas eben ;)

Martin K 3. Jun 2006 22:59

Re: ShellExecute und IsWindowVisible
 
Kann ich mittels Instance Handle auch irgendwie überprüfen, ob die Anwendung zu diesem Instance Handle noch läuft (s. erster Beitrag)?

Martin K 3. Jun 2006 23:12

Re: ShellExecute und IsWindowVisible
 
Na schön, falls es nicht geht könnte ich es ja noch mit FindWindow lösen.
Dazu bräuchte ich halt nur den ClassName und WindowName von (um diese Programme handelt es sich eigentlich):
- Borland Resource Compiler (brcc32.exe)
- Delphi Pascal Compiler (dcc32.exe)

Weiß die zufällig jemand oder wie ich sie herausfinden kann?

Dax 3. Jun 2006 23:47

Re: ShellExecute und IsWindowVisible
 
Öhm.. Das sind Konsolenprogramme, dort Fenster finden zu wollen kannste knicken^^

Martin K 3. Jun 2006 23:54

Re: ShellExecute und IsWindowVisible
 
Knicken? :gruebel:

Ich muss doch irgendwie prüfen können, ob das Programm läuft oder nicht...
Kann nämlich erst in meinem Programm mit der Prozedur fortfahren, wenn die Resource-Datei (mit brcc32.exe) erstellt wurde,
da ich mit der erstellten Datei dann weiterarbeiten möchte.

Gäbe natürlich noch die Möglichkeit, auf FileExists zu prüfen, doch falls die Resource wegen eines Fehlers nich compiliert wurde, läuft sich mein Programm zu Tode...

Dax 3. Jun 2006 23:58

Re: ShellExecute und IsWindowVisible
 
Du könntest dir auch mal ShellExecuteAndWaitShellExecuteAndWait ankucken ;)

Martin K 4. Jun 2006 00:00

Re: ShellExecute und IsWindowVisible
 
Eieieieiei....

Wieder so ein ellenlanger Code...
Na schön, werd's mal versuchen.

Danke für den Tipp!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr.
Seite 1 von 2  1 2      

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