Würden Sie gerne wissen, welches Control gerade den Fokus besitzt? Kein Problem, werden Sie sich jetzt sagen - das ist doch ganz einfach: MsgBox "Aktuelles Control: " & Me.ActiveControl.Name Hmmm... da haben Sie sicherlich nicht ganz unrecht - funktioniert aber nur innerhalb der eigenen Anwendung. Was aber, wenn Sie die Informationen über das aktuelle Control benötigen, egal welche Anwendung gerade aktiv ist? Dann hilft Ihnen nachfolgender Tipp! Um das Beispiel auszuprobieren, erstellen Sie am besten ein neues Projekt und plazieren auf die Form ein Timer-Steuerelement (tmrTimer), setzen Interval=100, und ziehen noch zwei Textbox-Controls auf die Form (txtClassName und txtHandle). Fügen Sie nachfolgende Code in den Allgemein-Teil der Form: ' alle benötigten API-Deklarationen Private Declare Function GetClassName Lib "user32" _ Alias "GetClassNameA" ( _ ByVal hWnd As Long, _ ByVal lpClassName As String, _ ByVal nMaxCount As Long) As Long Private Declare Function GetFocus Lib "user32" () As Long Private Declare Function GetForegroundWindow Lib "user32" () As Long Private Declare Function GetWindowThreadProcessId Lib "user32" ( _ ByVal hWnd As Long, _ lpdwProcessId As Long) As Long Private Declare Function AttachThreadInput Lib "user32" ( _ ByVal idAttach As Long, _ ByVal idAttachTo As Long, _ ByVal fAttach As Long) As Long ' benutzerdefinierter Datentyp Private Type tActiveCtrInfo lnghWnd As Long strClassName As String End Type Über das Timer-Ereignis des Timers wird jetzt in kurzen Zeitabständen sowohl der Klassennamen, als auch das Windowhandle des aktiven Controls ermittelt, und zwar systemübergreifend, d.h. egal, welche Anwendung gerade aktiv ist. ' Prüfung... Private Sub tmrTimer_Timer() Dim aciActCtr As tActiveCtrInfo ' Aktives Control... aciActCtr = GetActiveControl ' ...in den beiden Textboxen anzeigen With aciActCtr txtClassName.Text = .strClassName txtHandle.Text = CStr(.lnghWnd) End With End Sub Und hier die Funktion, die das aktive Control ermittelt. ' Aktives Cntrol ermitteln Private Function GetActiveControl() As tActiveCtrInfo Dim strBuffer As String Dim lngOtherThreadID As Long Dim lngThread1 As Long Dim lngThread2 As Long Dim lngGetCurrentThreadID As Long Dim blnReminder As Boolean Dim lnghWndControl As Long ' Prozess-ID der eigenen Anwendung lngThread1 = GetWindowThreadProcessId(Me.hWnd, _ lngGetCurrentThreadID) ' Prozess-ID der aktiven Anwendung lngThread2 = GetWindowThreadProcessId(GetForegroundWindow(), _ lngOtherThreadID) ' Falls eigene Anwendung nicht die aktive Anwendung... If lngThread1 <> lngThread2 Then blnReminder = AttachThreadInput(lngThread2, _ lngThread1, True) End If ' Handle des aktuellen Controls lnghWndControl = GetFocus() GetActiveControl.lnghWnd = lnghWndControl If blnReminder Then blnReminder = AttachThreadInput(lngThread2, _ lngThread1, False) End If ' jetzt Klassennamen ermitteln strBuffer = Space(255) GetClassName lnghWndControl, strBuffer, Len(strBuffer) If InStr(strBuffer, Chr$(0)) > 0 Then strBuffer = Left$(strBuffer, _ InStr(strBuffer, Chr$(0)) - 1) End If GetActiveControl.strClassName = strBuffer End Function Tipp: Dieser Tipp wurde bereits 29.962 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |