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

Fenster verschieben mit VBA

Forumthread: Fenster verschieben mit VBA

Fenster verschieben mit VBA
marspoki
Hallo,
Ich hole mir ein Programmfenster, sagen wir mal notead.exe in den Vordergrund.
AppActivate ("Notepad.exe")
Kann ich mit VBA genau dieses Fenster an eine ganz bestimmte Stelle im Bildschirm verscheiben lassen!?
Vielen Dank für Hilfe
marspoki
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Fenster verschieben mit VBA
14.09.2009 17:53:27
Nepumuk
Hallo,
ein Beispiel in dem das Editorfenster nach oben links (Pos. 0, 0) verschoben wird:
Option Explicit

Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Declare Function MoveWindow Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal nWidth As Long, _
    ByVal nHeight As Long, _
    ByVal bRepaint As Long) As Long
Private Declare Function GetWindowRect Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByRef lpRect As RECT) As Long
Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" ( _
    ByVal hWnd As Long, _
    ByVal lpClassName As String, _
    ByVal nMaxCount As Long) As Long

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Const GC_CLASSNAMENOTEPAD = "Notepad"

Public Sub test()
    
    Dim hWnd As Long, lngReturn As Long
    Dim udtRECT As RECT
    Dim strClassName As String
    
    AppActivate "Unbenannt - Editor", True
    
    hWnd = GetForegroundWindow
    
    If hWnd <> 0 Then
        
        strClassName = Space(256)
        lngReturn = GetClassName(hWnd, strClassName, 256)
        
        If Left$(strClassName, lngReturn) = GC_CLASSNAMENOTEPAD Then
            Call GetWindowRect(hWnd, udtRECT)
            With udtRECT
                Call MoveWindow(hWnd, 0, 0, .Right - .Left, .Bottom - .Top, -1)
            End With
        End If
    End If
    
End Sub

Gruß
Nepumuk
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Fenster verschieben mit VBA


Schritt-für-Schritt-Anleitung

Um ein Fenster mit VBA an eine bestimmte Position auf dem Bildschirm zu verschieben, verwende die folgenden Schritte:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".
  3. Füge den folgenden Code ein:

    Option Explicit
    Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
    Private Declare Function MoveWindow Lib "user32.dll" ( _
       ByVal hWnd As Long, _
       ByVal x As Long, _
       ByVal y As Long, _
       ByVal nWidth As Long, _
       ByVal nHeight As Long, _
       ByVal bRepaint As Long) As Long
    Private Declare Function GetWindowRect Lib "user32.dll" ( _
       ByVal hWnd As Long, _
       ByRef lpRect As RECT) As Long
    
    Private Type RECT
       Left As Long
       Top As Long
       Right As Long
       Bottom As Long
    End Type
    
    Public Sub FensterVerschieben()
       Dim hWnd As Long
       Dim udtRECT As RECT
    
       ' Aktiviere das Fenster, das verschoben werden soll
       AppActivate "Unbenannt - Editor"
    
       hWnd = GetForegroundWindow()
       If hWnd <> 0 Then
           Call GetWindowRect(hWnd, udtRECT)
           Call MoveWindow(hWnd, 0, 0, udtRECT.Right - udtRECT.Left, udtRECT.Bottom - udtRECT.Top, True)
       End If
    End Sub
  4. Ändere den Fenstertitel:

    • Stelle sicher, dass der Titel des Fensters, das Du verschieben möchtest, in AppActivate korrekt angegeben ist.
  5. Führe das Makro aus:

    • Drücke F5, um das Makro auszuführen und das Fenster wird an die Position (0, 0) verschoben.

Häufige Fehler und Lösungen

  • Fehler: Fenster wird nicht gefunden:

    • Überprüfe, ob der Fenstertitel genau mit dem in AppActivate angegebenen Titel übereinstimmt.
  • Fehler: Makro läuft nicht:

    • Stelle sicher, dass Du die richtigen Berechtigungen hast, um VBA auszuführen und dass Makros in Deinen Excel-Einstellungen aktiviert sind.
  • Fenster bewegt sich nicht:

    • Stelle sicher, dass die user32.dll korrekt deklariert ist und dass das relevante Fenster im Vordergrund ist.

Alternative Methoden

Wenn Du nicht mit VBA arbeiten möchtest, kannst Du auch Tools von Drittanbietern verwenden, um Fenster zu verschieben. Programme wie AutoHotkey ermöglichen es Dir, Skripte zu erstellen, die Fenster automatisch an eine bestimmte Position verschieben.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um ein Notepad-Fenster auf die linke obere Ecke des Bildschirms zu verschieben:

AppActivate "Notepad"
Call MoveWindow(hWnd, 0, 0, 800, 600, True) ' Verschiebt das Fenster auf Position (0,0) mit Breite 800 und Höhe 600

Tipps für Profis

  • Verwende Variablen für Positionen:

    • Anstatt harte Werte zu verwenden, definiere Variablen für x und y, um die Position des Fensters dynamisch zu gestalten.
  • Kombiniere mit anderen VBA-Funktionen:

    • Integriere das Fenster verschieben in größere Automatisierungsprozesse, wie das Öffnen und Bearbeiten von Dateien.
  • Debugging:

    • Nutze Debug.Print hWnd, um den Handle des Fensters zu überprüfen, falls das Verschieben nicht funktioniert.

FAQ: Häufige Fragen

1. Was ist GetForegroundWindow? GetForegroundWindow ist eine Funktion, die den Handle (hWnd) des aktuell aktiven Fensters zurückgibt.

2. Wie funktioniert MoveWindow? MoveWindow ermöglicht es, die Position und Größe eines Fensters zu ändern, indem Du die entsprechenden Parameter übergibst.

3. Kann ich auch andere Fenster verschieben? Ja, Du kannst jedes Fenster verschieben, solange Du den korrekten Fenstertitel in AppActivate angibst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige