Solved

finding a window handle in VB (Visual Studio 2005)

Posted on 2008-06-09
5
585 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
ID: 21747382
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
ID: 21747442
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
ID: 21747503
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
ID: 21768431
Dim i as long = System.Diagnostics.Process.Start(file).Handle
0
 
LVL 11

Author Closing Comment

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

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
C# Offline Apllication 5 51
VB6 ListBox Question 4 30
Handle KeyDown for ToolStripDropDownButton, ToolStripMenuItem 3 18
Variable Event ? 3 20
Most everyone who has done any programming in VB6 knows that you can do something in code like Debug.Print MyVar and that when the program runs from the IDE, the value of MyVar will be displayed in the Immediate Window. Less well known is Debug.Asse…
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
The viewer will learn how to use and create new code templates in NetBeans IDE 8.0 for Windows.

914 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

17 Experts available now in Live!

Get 1:1 Help Now