Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 600
  • Last Modified:

finding a window handle in VB (Visual Studio 2005)

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
ugeb
Asked:
ugeb
  • 2
  • 2
2 Solutions
 
Jaime OlivaresCommented:
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
 
ugebAuthor Commented:
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
 
Jaime OlivaresCommented:
try with this static method: System.Diagnostics.Process.GetProcessesByName()

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.getprocessesbyname.aspx
0
 
rachitkohliCommented:
Dim i as long = System.Diagnostics.Process.Start(file).Handle
0
 
ugebAuthor Commented:
Still had problems, but have moved on.  This points me in the right direction.  Thanks!
0

Featured Post

NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now