Rubrik: Access | VB-Versionen: VBA | 14.12.02 |
VBA: Window-Handle eines Controls ermitteln Dieser Tipp zeigt, wie sich z.B. das Window-Handle einer TextBox in VBA ermitteln lässt - trotzt fehlender hWnd-Eigenschaft. | ||
Autor: Dieter Otter | Bewertung: | Views: 32.216 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Wir VB'ler sind es ja gewohnt, dass ein Control über eine hWnd-Eigenschaft verfügt - sprich über diese Eigenschaft bekommen wir das Windowhandle des Controls geliefert. Dieses Handle wird z.B. oft von diversen API-Funktionen benötigt.
Die FTP-Funktionen unserer VBEx32.DLL z.B. benötigen ebenfalls das Windowhandle einer TextBox, um den Status beim Up- und Download von Dateien anzeigen zu können. Auch die beliebte sevZip32.DLL benötigt für das Anzeigen des ZIP-Vorgangs das Handle einer TextBox.
In VBA jedoch verfügt die TextBox über keine hWnd-Eigenschaft
Nachfolgender Tipp zeigt, wie Sie das Fensterhandle dennoch ermitteln können. Hierzu benötigen wir die GetFocus API-Funktion, die das Windowhandle des aktiven Controls der eigenen Anwendung zurückgibt - natürlich nur, sofern das Control auch ein Window ist (ein Label z.B. ist kein Window und verfügt deshalb auch nicht über ein Windowhandle).
' benötigte API-Deklaration Private Declare Function GetFocus Lib "user32" _ Alias "GetFocus" () As Long
Um nun das Handle einer beliebigen TextBox unserer VBA-Form zu ermitteln, ist es also notwendig, zunächst den Fokus auf die TextBox zu setzen, um dann über GetFocus das Fensterhandle zu bekommen:
' Window-Handle eines Controls ermitteln Public Function Control2hWnd(oControl As Control) As Long On Error Resume Next ' Fokus auf das Control setzen oControl.SetFocus If Err Then ' Fehler? Dann 0 zurückgeben Control2hWnd = 0 Else ' Windowhandle ermitteln Control2hWnd = GetFocus() End If On Error GoTo 0 End Function
Aufruf:
Dim hWnd As Long hWnd = Control2hWnd(TextBox1)