Solved

finding a window handle in VB (Visual Studio 2005)

Posted on 2008-06-09
5
581 Views
Last Modified: 2013-11-26
Hi,

I'm trying to figure out how to get the handle of a window that's already open.  I'm using

System.Diagnostics.Process.Start(file)

to load a file into Firefox. Can this give me back a handle?

I've also tried the attached code that I found online, written for VB 6, but I'm in VS 2005 and the line

wtl = GetWindowTextLength(lhWndP) + 1

gives me a runtime error of PInvoke and 'unbalanced stack'

Anybody have code that will find a window and that works in VS 2005?

Thanks!
Gene



Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _

ByVal lpWindowName As String) As Long

    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 GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long

    Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
 

    Private Const GW_HWNDNEXT = 2
 

    Private Sub Find_Browser_Window()

        Dim lhWndP As Long

        If GetHandleFromPartialCaption(lhWndP, " - Mozilla Firefox") = True Then

            MsgBox("Found Window Handle: " & lhWndP, vbOKOnly + vbInformation)

        Else

            MsgBox("Window ' - Microsoft Outlook' not found!", vbOKOnly + vbExclamation)

        End If

    End Sub
 

    Private Function GetHandleFromPartialCaption(ByRef lWnd As Long, ByVal sCaption As String) As Boolean

        Dim lhWndP As Long

        Dim sStr As String

        Dim wtl As Integer

        GetHandleFromPartialCaption = False

        lhWndP = FindWindow(vbNullString, vbNullString) 'PARENT WINDOW

        Do While lhWndP <> 0

            wtl = GetWindowTextLength(lhWndP) + 1

            Debug.Print("wtl = " & wtl & ", lhWndP = " & lhWndP)

            sStr = (GetWindowTextLength(lhWndP) + 1).ToString '& Chr(0)

            GetWindowText(lhWndP, sStr, Len(sStr))

            sStr = Microsoft.VisualBasic.Left(sStr, Len(sStr) - 1)

            If InStr(1, sStr, sCaption) > 0 Then

                GetHandleFromPartialCaption = True

                lWnd = lhWndP

                Exit Do

            End If

            lhWndP = GetWindow(lhWndP, GW_HWNDNEXT)

        Loop

    End Function

Open in new window

0
Comment
Question by:ugeb
  • 2
  • 2
5 Comments
 
LVL 55

Expert Comment

by:Jaime Olivares
Comment Utility
if you launch the application with Process.Start, you can try with this:

Dim p as Process = System.Diagnostics.Process.Start(file)
Dim h as IntPtr = p.MainWindowHandle

0
 
LVL 11

Author Comment

by:ugeb
Comment Utility
Hi,

Thanks for the response.  I'm getting the error:

Object reference not set to an instance of an object.

It looks like p is not being set.  Usually the Firefox browser is already running, does that affect it?  How would I get the handle of a process already running?
0
 
LVL 55

Accepted Solution

by:
Jaime Olivares earned 300 total points
Comment Utility
try with this static method: System.Diagnostics.Process.GetProcessesByName()

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.getprocessesbyname.aspx
0
 
LVL 14

Assisted Solution

by:rachitkohli
rachitkohli earned 200 total points
Comment Utility
Dim i as long = System.Diagnostics.Process.Start(file).Handle
0
 
LVL 11

Author Closing Comment

by:ugeb
Comment Utility
Still had problems, but have moved on.  This points me in the right direction.  Thanks!
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
The viewer will learn how to use and create keystrokes in Netbeans IDE 8.0 for Windows.
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now