Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Fenster in den Vordergrund

Fenster in den Vordergrund
26.03.2020 08:30:43
Sebastian
Hallo Leute,
gibt es noch eine andere Möglichkeit ein Windows Fenster (Programm) in den Vordergrund zu holen außer die "SetForegroundWindow" Methode?
Speziell geht es um ein ein Programm von Cisco - welches ich gern mit Knopfdruck in den Vordergrund bringen möchte.
Vielen Dank und viele Grüße
Sebastian
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Reicht nicht Alt+Tab …
26.03.2020 08:50:55
RPP63
… oder das Verschieben des Programms auf einen virtuellen Desktop (Win+Tab, Aktivierung mit Strg+Win+Pfeil)?
Fragt sich Ralf
AW: Reicht nicht Alt+Tab …
26.03.2020 08:54:33
Sebastian
Nein das geht leider nicht - da es ja viele Programme sind. und ich nur dieses Eine Fenster brauche :-(
AW: Reicht nicht Alt+Tab …
26.03.2020 09:33:49
Sebastian
Hat jemand noch eine andere Idee?
Anzeige
AW: Reicht nicht Alt+Tab …
26.03.2020 10:07:47
volti
Hallo Sebastian,
es gibt noch
Declare PtrSafe Function BringWindowToTop Lib "user32" Alias "BringWindowToTop" (ByVal hwnd As LongPtr) As Long
Habe ich aber noch nie verwendet.
Und das Setzen als Top-Window:

Option Explicit
#If VBA7 Then
 Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
 Private Declare PtrSafe Function SetWindowPos Lib "user32" (ByVal hwnd As LongPtr, ByVal hWndInsertAfter As LongPtr, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
 Dim hwnd As LongPtr
#Else
 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 Private Declare Function SetWindowPos Lib "user32" (ByVal Hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
 Dim hwnd As Long
#End If
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const cFLAGS = &H3
Sub Test()
 ' SetWindowPos FindWindow(vbNullString, "Captiontext"), HWND_TOPMOST, 0, 0, 0, 0, cFLAGS
  hwnd = 1234567
  SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, cFLAGS
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: Reicht nicht Alt+Tab …
26.03.2020 10:55:20
Sebastian
hi Super das Fenster wird zumindest mal Gefunden nur wie bekomme ich es in den Vordergrund?
Sub Test()
SetWindowPos FindWindow(vbNullString, "NamedesFensters"), HWND_TOPMOST, 0, 0, 0, 0,  _
cFLAGS
hwnd = 1234567
SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, cFLAGS
End Sub

Anzeige
AW: Reicht nicht Alt+Tab …
26.03.2020 11:37:13
volti
Hallo,
deine Aussage kann ich so nicht nachvollziehen.
Die SetWindowPos-Funktion, wie auch SetForegroundWindow setzen das übergebene Fenster in den Vordergrund.
Zumindest, wenn es nicht minimiert ist.
HWND_TOPMOST sorgt dafür, dass es immer als oberstes steht. SetForeGroundwindow könnte später von anderen Programmen wieder zunichte gemacht werden.
Für die Funktionen brauchst Du das Handle des gewünschten Fensters.
Aus Deiner Anfrage geht nicht hervor, ob Du es hast. Ansonsten könnte es, wie in meinem Beispiel beschrieben über den Fenstertext ermittelt werden.
In meinem Beispiel gilt natürlich nur ein Aufruf, entweder der erste mit dem Fenstertext oder der zweite mit dem vorhandenen Handle.
Das Handle ist weder 1234567 und der Fenstertext "NamedesFensters" scheint mir auch unwahrscheinlich.
Hier noch ein abgewandeltes Beispiel:
Sub Test()
 hwnd = FindWindow(vbNullString, "Captiontext")
 If hwnd > 0 Then SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, cFLAGS
End Sub

viele Grüße
Karl-Heinz
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Fenster in den Vordergrund holen mit VBA


Schritt-für-Schritt-Anleitung

Um ein Fenster in den Vordergrund zu holen, kannst Du die SetForegroundWindow und SetWindowPos Funktionen in VBA verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und gehe zu Entwicklertools > Visual Basic.
  2. Erstelle ein neues Modul.
  3. Füge folgenden Code ein:
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function SetWindowPos Lib "user32" (ByVal hwnd As LongPtr, ByVal hWndInsertAfter As LongPtr, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal uFlags As Long) As Long

Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2

Sub FensterInDenVordergrundHolen()
    Dim hwnd As LongPtr
    hwnd = FindWindow(vbNullString, "Titel des Fensters") ' Ersetze "Titel des Fensters" mit dem tatsächlichen Titel
    If hwnd <> 0 Then
        SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
    Else
        MsgBox "Fenster nicht gefunden."
    End If
End Sub
  1. Ersetze "Titel des Fensters" mit dem Titel des Fensters, das Du in den Vordergrund holen möchtest.
  2. Führe das Makro aus.

Häufige Fehler und Lösungen

  • Fenster nicht gefunden: Stelle sicher, dass der Titel des Fensters exakt übereinstimmt. Du kannst auch die Funktion vba findwindow verwenden, um den Fenstertitel herauszufinden.
  • Fenster wird nicht in den Vordergrund geholt: Überprüfe, ob das Fenster minimiert ist. Minimierte Fenster können nicht in den Vordergrund geholt werden.

Alternative Methoden

Neben SetForegroundWindow und SetWindowPos gibt es auch die Möglichkeit, das Fenster einfach durch Alt + Tab oder Win + Tab zu wechseln. Dies ist jedoch oft nicht effizient, wenn Du ein bestimmtes Fenster immer im Vordergrund halten möchtest.


Praktische Beispiele

  • Fenster immer im Vordergrund halten: Du kannst die SetWindowPos Funktion verwenden, um ein Fenster immer im Vordergrund zu halten:
SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
  • Aktives Fenster in Windows 10 oder 11: Um das aktive Fenster in Windows 10 oder 11 immer im Vordergrund zu halten, kannst Du den obigen Code anpassen, um das Handle des aktiven Fensters zu verwenden.

Tipps für Profis

  • Nutze die vba setforegroundwindow Methode für Fenster, die nicht immer im Vordergrund bleiben sollen. Diese Methode kann helfen, ein Fenster vorübergehend in den Vordergrund zu bringen.
  • Experimentiere mit den Flags in SetWindowPos, um das Verhalten des Fensters besser zu steuern.

FAQ: Häufige Fragen

1. Kann ich ein Fenster mit VBA immer im Vordergrund halten? Ja, das kannst Du mit der SetWindowPos Funktion und dem HWND_TOPMOST Parameter erreichen.

2. Wie finde ich den Titel eines Fensters? Du kannst die FindWindow Funktion verwenden, um das Handle eines Fensters basierend auf seinem Titel zu ermitteln.

3. Funktioniert das auch in Windows 11? Ja, die Methoden funktionieren sowohl in Windows 10 als auch in Windows 11. Stelle sicher, dass Du die richtigen Titel verwendest.

4. Was passiert, wenn das Fenster minimiert ist? Minimierte Fenster können nicht in den Vordergrund geholt werden. Stelle sicher, dass das Fenster sichtbar ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige