' In einem Modul (im Sender-Projekt)
Option Explicit
' ===================================================================
'
' ChildWindows ermitteln per FindWindow
'
'
' Autor:
' Guido Eisenbeis Software (GES), guidoeisenbeis@web.de, 2006-02-04
' ===================================================================
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function GetWindow Lib "user32" _
(ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Const GW_CHILD = 5
Private Const GW_HWNDNEXT = 2
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 FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Function FindChildWindow(ByVal sParentWinTitel As String, _
ByVal sChildWinText As String) As Long
Dim lParentHwnd As Long
Dim lChildHwnd As Long
Dim sClasName As String
Dim sWinText As String
' Handle der Taskbar ermitteln
lParentHwnd = FindWindow(vbNullString, sParentWinTitel)
' erstes ChildWindow suchen
lChildHwnd = GetWindow(lParentHwnd, GW_CHILD)
Do While (lChildHwnd <> 0)
' Klassenname ermitteln
sClasName = GetTheClassName(lChildHwnd)
' WindowText ermitteln
sWinText = GetTheWindowText(lChildHwnd)
If (sWinText = sChildWinText) Then
FindChildWindow = lChildHwnd
Exit Do
End If
' ' Handle, ClassName und WindowText ausgeben
' Debug.Print "Handle: " & lChildHwnd & vbTab & vbTab & _
' " ClassName: " & sClasName & vbTab & vbTab & vbTab & _
' " WindowText: " & sWinText
' nächstes ChildWindow suchen
lChildHwnd = GetWindow(lChildHwnd, GW_HWNDNEXT)
Loop
End Function
' Routine zum Ermitteln des Klassennamens
Private Function GetTheClassName(ByVal lHwnd As Long) As String
Dim sClasName As String
' Create a buffer
sClasName = String(255, Chr$(0))
' Get the window's classname
Call GetClassName(lHwnd, sClasName, 255)
' Strip the rest of buffer
sClasName = Left$(sClasName, InStr(sClasName, Chr$(0)) - 1)
GetTheClassName = sClasName
End Function
' Routine zum Ermitteln des Fenstertextes
Private Function GetTheWindowText(ByVal lHwnd As Long) As String
Dim sWinText As String
' Create a buffer
sWinText = String(255, Chr$(0))
' Get the window's text
GetWindowText lHwnd, sWinText, 255
' Strip the rest of buffer
sWinText = Left$(sWinText, InStr(sWinText, Chr$(0)) - 1)
GetTheWindowText = sWinText
End Function Das Empfänger Projekt musst du jetzt zur Exe kompilieren und starten. Den Sender kannst du als Exe oder in der IDE benutzen. Auf diese Weise kannst du beliebig viele Funktionen in deiner Exe aufrufen.
Falls ich in der Kürze was vergessen habe,sag bescheid !
Falls es zu deiner Zufriedenheit funktioniert, sag Bescheid ! *grins*
PS: Vielleicht sollte ich diesen Code als Tipp einreichen !?
Guido. |