Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wie Fensterhendel (hWnd) ermitteln?

Forumthread: Wie Fensterhendel (hWnd) ermitteln?

Wie Fensterhendel (hWnd) ermitteln?
26.02.2003 16:26:12
Georg
Hallo,

Ich habe in der MSDN keine Methode gefunden um das Handle auf eine Excelapplikation zu ermitteln.

Da die GetOpenFileName nicht meinen Wünschen entspricht, verwende ich stattdessen die entsprechenden API-Funktionen, welche mehr flexibilität bieten.
(Speziell Startpfad setzen usw., was aber mit chdir nicht immer funktioniert)

Für die API-Funktion benötige ich das Windowshandle des aktiven Excelfensters.

Wie kann ich das hendl einfangen?
Wer komme ich an dieses heran?
(Applikationsobjekt scheidet aus, oder?)

Vielen Dank für die Hilfe



Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Wie Fensterhendel (hWnd) ermitteln?
26.02.2003 17:18:09
Thomas Risi

Hallo Georg

Versuch's mal etwa so ...


Option Explicit

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
 ByVal lpClassName As StringByVal lpWindowName As StringAs Long

Dim wHwnd As Long

'...

hwnd = FindWindow("xlmain", vbNullString)

'...

 

     Code eingefügt mit Syntaxhighlighter 1.15


Gruß
Thomas

Risi Thomas Softwareentwicklung



Anzeige
Re: Wie Fensterhendel (hWnd) ermitteln?
26.02.2003 17:19:53
Georg

Hallo Thomas!

Vielen Dank für den Tipp

Mit GetActiveWindow sollte es auch funktionieren.

Danke und LG, Georg!

;
Anzeige

Infobox / Tutorial

Fensterhandle (hWnd) in Excel VBA ermitteln


Schritt-für-Schritt-Anleitung

Um das Fensterhandle (hWnd) einer Excel-Anwendung mit VBA zu ermitteln, kannst Du die API-Funktion FindWindow nutzen. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel (ALT + F11).

  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > "Einfügen" > "Modul").

  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
        ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    
    Sub GetHWnd()
        Dim hwnd As Long
        hwnd = FindWindow("xlmain", vbNullString)
        MsgBox "Das hWnd der Excel-Anwendung ist: " & hwnd
    End Sub
  4. Führe das Makro GetHWnd aus, um das Handle des aktiven Excel-Fensters zu ermitteln.

Das ist eine einfache Methode, um das hwnd in VBA zu finden.


Häufige Fehler und Lösungen

  • Fehler: „Typenkonflikt“ beim Deklarieren der Funktion.

    • Lösung: Stelle sicher, dass die Deklaration korrekt ist und Du Option Explicit am Anfang des Moduls verwendest.
  • Fehler: Das hwnd wird als 0 zurückgegeben.

    • Lösung: Überprüfe, ob das Excel-Fenster aktiv ist. Wenn Excel minimiert oder im Hintergrund ist, kann FindWindow möglicherweise das Handle nicht finden.

Alternative Methoden

Ein weiterer Ansatz zur Ermittlung des hwnd ist die Verwendung der GetActiveWindow-Funktion. Diese Methode kann in bestimmten Szenarien nützlich sein:

  1. Füge die folgende Deklaration in dein Modul ein:

    Public Declare Function GetActiveWindow Lib "user32" () As Long
  2. Verwende diese Funktion in einem Sub:

    Sub GetActiveHWnd()
        Dim hwnd As Long
        hwnd = GetActiveWindow()
        MsgBox "Das aktive Fenster-Handle ist: " & hwnd
    End Sub

Diese Methode kann in Kombination mit vba findwindowex verwendet werden, um das Handle von untergeordneten Fenstern zu ermitteln.


Praktische Beispiele

Hier ist ein Beispiel, das sowohl FindWindow als auch GetActiveWindow verwendet, um die Funktionsweise zu demonstrieren:

Sub ShowHandles()
    Dim hwnd1 As Long
    Dim hwnd2 As Long

    hwnd1 = FindWindow("xlmain", vbNullString)
    hwnd2 = GetActiveWindow()

    MsgBox "Excel hWnd: " & hwnd1 & vbCrLf & "Aktives Fenster hWnd: " & hwnd2
End Sub

Dieses Beispiel zeigt Dir die Unterschiede zwischen dem Handle der Excel-Anwendung und dem Handle des aktuell aktiven Fensters.


Tipps für Profis

  • Achte darauf, die richtigen Klassennamen zu verwenden, insbesondere wenn Du mit verschiedenen Excel-Versionen arbeitest.
  • Nutze die Windows API-Dokumentation, um mehr über die Funktionen zu erfahren und deren Parameter zu verstehen.
  • Experimentiere mit weiteren API-Funktionen, um noch mehr über Fensterverwaltung in Excel VBA zu lernen.

FAQ: Häufige Fragen

1. Was ist ein hWnd?
Das hWnd (Handle to a Window) ist eine eindeutige Kennung für ein Fenster in Windows, die es ermöglicht, auf Fenster und ihre Eigenschaften zuzugreifen.

2. Kann ich hWnds von anderen Anwendungen ermitteln?
Ja, Du kannst FindWindow verwenden, um das Handle von Fenstern anderer Anwendungen zu ermitteln, solange Du den richtigen Klassennamen und Fenstername kennst.

3. Funktioniert dieser Code in allen Excel-Versionen?
Ja, die grundlegenden API-Funktionen wie FindWindow sind in den meisten Windows-Versionen und Excel-Versionen verfügbar. Achte jedoch auf spezifische Unterschiede bei den Klassennamen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige