Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

finding a window handle in VB (Visual Studio 2005)

Posted on 2008-06-09
5
Medium Priority
?
597 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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 1200 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 800 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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Enums (shorthand for ‘enumerations’) are not often used by programmers but they can be quite valuable when they are.  What are they? An Enum is just a type of variable like a string or an Integer, but in this case one that you create that contains…
Jaspersoft Studio is a plugin for Eclipse that lets you create reports from a datasource.  In this article, we'll go over creating a report from a default template and setting up a datasource that connects to your database.
THe viewer will learn how to use NetBeans IDE 8.0 for Windows to perform CRUD operations on a MySql database.
The viewer will learn how to synchronize PHP projects with a remote server in NetBeans IDE 8.0 for Windows.
Suggested Courses

721 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