Tools Links Login

Find Any Window

Sometimes you need to find a window using the API Call findwindow , but what if this windows caption changes
you can't find that same window all the time. With this function you can find any window just by knowing a few letters
in the caption. This will return the windows' hWnd , also includes a function that will grab the windows caption.
This is something that will be useful to alot of programmers. Updated! 2.23.01

Original Author: DoWnLoHo

Assumptions

call it like so
call msgbox(FindAnyWindow&(me,"text of window"))
or to get the caption do this
call msgbox(getcaption$(FindAnyWindow&(me,"text of window")))

Side Effects

none(that I know of)

API Declarations

Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Public Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long

Code

Public Function GetCaption(ByVal lhWnd As Long) As String
Dim sA As String, lLen As Long

lLen& = GetWindowTextLength(lhWnd&)
sA$ = String(lLen&, 0&)
Call GetWindowText(lhWnd&, sA$, lLen& + 1)
GetCaption$ = sA$
End Function
Public Function FindAnyWindow(frm As Form, ByVal WinTitle As String, Optional ByVal CaseSensitive As Boolean = False) As Long
Dim lhWnd As Long, sA As String
lhWnd& = frm.hwnd
Do Until lhWnd& = 0
DoEvents

sA$ = GetCaption(lhWnd&)
If InStr(IIf(CaseSensitive = False, LCase$(sA$), sA$), IIf(CaseSensitive = False, LCase$(WinTitle$), WinTitle$)) Then FindAnyWindow& = lhWnd&: Exit Do Else FindAnyWindow& = 0

lhWnd& = GetNextWindow(lhWnd&, 2)
Loop
End Function

About this post

Posted: 2002-06-01
By: ArchiveBot
Viewed: 93 times

Categories

Visual Basic 6

Attachments

No attachments for this post


Loading Comments ...

Comments

No comments have been added for this post.

You must be logged in to make a comment.