vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: System/Windows · Prozesse/Tasks   |   VB-Versionen: VB4, VB5, VB617.03.03
Fensterstatus einer Anwendung abfragen

Dieser Tipp zeigt, wie sich feststellen lässt, ob eine (Fremd-)Anwendung minimiert, maximiert oder normal angezeigt wird.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  28.559 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Über die WindowState-Eigenschaft lässt sich innerhalb der eigenen Anwendung feststellen, wie ein Fenster aktuell angezeigt wird: Normal, Minimiert oder Maximiert

' WindowState der eigenen Anwendung
If Me.WindowState = vbNormal Then
  MsgBox "Fenster wird normal angezeigt."
ElseIf Me.WindowState = vbMinimized Then
  MsgBox "Fenster ist minimiert."
ElseIf Me.WindowState = vbMaximizied Then
  MsgBox "Fenster ist maximiert."
End If

Wie sieht es aber bei Fremdanwendungen aus? Wie lässt sich also ermitteln, ob die Anwendung xy z.B. normal oder maximiert angezeigt wird?

Hierzu benötigen wir die API-Funktion GetWindowPlacement.

Folgenden Code bitte zunächst in ein Modul einfügen:

Option Explicit
 
' zunächst die benötigten API-Deklarationen
Private Declare Function GetWindowPlacement Lib "user32" ( _
  ByVal hWnd As Long, _
  lpwndpl As WINDOWPLACEMENT) As Long
 
Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type
 
Private Type POINTAPI
  X As Long
  Y As Long
End Type
 
Private Type WINDOWPLACEMENT
  Length As Long
  flags As Long
  showCmd As Long
  ptMinPosition As POINTAPI
  ptMaxPosition As POINTAPI
  rcNormalPosition As RECT
End Type
 
Public Enum SW_CMD
  SW_HIDE = 0
  SW_SHOWNORMAL = 1
  SW_SHOWMINIMIZED = 2
  SW_SHOWMAXIMIZED = 3
  SW_SHOWNOACTIVATE = 4
  SW_SHOW = 5
  SW_MINIMIZE = 6
  SW_SHOWMINNOACTIVE = 7
  SW_SHOWNA = 8
  SW_RESTORE = 9
End Enum
' Fensterstatus abfragen
Public Function GetWindowState(ByVal hWnd As Long) As SW_CMD
  Dim W As WINDOWPLACEMENT
 
  If GetWindowPlacement(hWnd, W) = 0 Then
    ' Fehler! Evtl. wurde kein Window mit dem 
    ' angegebenen Handle gefunden
    GetWindowState = -1
  Else
    ' Fensterstatus zurückgeben
    GetWindowState = W.showCmd
  End If
End Function

Zum Testen jetzt einfach einmal einen CommandButton auf die Form setzen und folgenden Code "hinterlegen":

Private Sub Command1_Click()
  Dim nState As SW_CMD
 
  nState = GetWindowState(Me.hWnd)
 
  Select Case nState
    Case SW_CMD.SW_HIDE
      MsgBox "Fenster ist hidden"
    Case SW_CMD.SW_SHOWMAXIMIZED
      MsgBox "Fenster ist maximiert"
    Case SW_CMD.SW_SHOWMINIMIZED
      MsgBox "Fenster is minimiert"
    Case SW_CMD.SW_SHOWNORMAL
      MsgBox "Fenster wird normal angezeigt"
  End Select
End Sub

Jetzt das Proggi starten und auf den Button klicken. Danach mal die Form maximieren und wieder auf den Button klicken.

Das ganze lässt sich jetzt auf jedes Window anwenden. Um nun den Status eines externen Windows abzufragen, musst das Windowhandle bekannt sein. Dieses kann ggf. über die FindWindow-API ermittelt werden. Oder einfach mal in unsere Tipps & Tricks schauen
 

Dieser Tipp wurde bereits 28.559 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel