AGB  ·  Datenschutz  ·  Impressum  







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

ShellExecute und IsWindowVisible

Ein Thema von Martin K · begonnen am 3. Jun 2006 · letzter Beitrag vom 4. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

ShellExecute und IsWindowVisible

  Alt 3. Jun 2006, 23:33
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 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?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: ShellExecute und IsWindowVisible

  Alt 3. Jun 2006, 23:37
ShellExecute gibt kein Fensterhandle zurück! 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..
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: ShellExecute und IsWindowVisible

  Alt 3. Jun 2006, 23:39
Zitat von Dax:
ShellExecute gibt kein Fensterhandle zurück!
Ö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???
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: ShellExecute und IsWindowVisible

  Alt 3. Jun 2006, 23:52
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
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: ShellExecute und IsWindowVisible

  Alt 3. Jun 2006, 23:59
Kann ich mittels Instance Handle auch irgendwie überprüfen, ob die Anwendung zu diesem Instance Handle noch läuft (s. erster Beitrag)?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: ShellExecute und IsWindowVisible

  Alt 4. Jun 2006, 00:12
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?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: ShellExecute und IsWindowVisible

  Alt 4. Jun 2006, 00:47
Öhm.. Das sind Konsolenprogramme, dort Fenster finden zu wollen kannste knicken^^
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: ShellExecute und IsWindowVisible

  Alt 4. Jun 2006, 00:54
Knicken?

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...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#9

Re: ShellExecute und IsWindowVisible

  Alt 4. Jun 2006, 00:58
Du könntest dir auch mal ShellExecuteAndWaitShellExecuteAndWait ankucken
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: ShellExecute und IsWindowVisible

  Alt 4. Jun 2006, 01:00
Eieieieiei....

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

Danke für den Tipp!
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:58 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