Solved

X,Y coordinates of a window

Posted on 2008-06-13
8
324 Views
Last Modified: 2008-06-13
Hi
I need some way of knowing the x & y location of a window (which is not in my own application). For example, a popup window from which i wan't to extract the color. I have used
  Private Declare Auto Function FindWindow Lib "user32" ()
to locate the window for which i need to know the x & y coordinates, but after that it got complicated.

Any thoughts ?
0
Comment
Question by:soriega
  • 3
  • 3
  • 2
8 Comments
 
LVL 10

Expert Comment

by:Clif
Comment Utility
Something like this?


Structure RECT

       Public Left As Long

       Public Top As Long

       Public Right As Long

       Public Bottom As Long

End Structure
 

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

   Private Declare Function GetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hwnd As Long, ByVal lpRect As RECT) As Long
 

Private Sub MoveIt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MoveIt.Click

       Dim NotepadRect As RECT

       Dim NotepadHandle As Long
 

       NotepadHandle = FindWindow("Notepad", "Untitled - Notepad")
 

       ' ERROR IS ON THE NEXT LINE!!

       GetWindowRect(NotepadHandle, NotepadRect)

       MsgBox("Top = " & NotepadRect.Top & _

           vbCrLf & "Bottom = " & NotepadRect.Bottom & _

           vbCrLf & "Left = " & NotepadRect.Left & _

           vbCrLf & "Right = " & NotepadRect.Right)

End Sub

Open in new window

0
 

Author Comment

by:soriega
Comment Utility
I get this errormessage:
System.AccessViolationException was unhandled
  Message="Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
0
 
LVL 10

Expert Comment

by:Clif
Comment Utility
Oops.  Sorry, I gave you the error version (This is just not my day.  It's like it's Friday the 13th, or something).

Try the following:

Option Explicit

Private Type RECT

        Left As Long

        Top As Long

        Right As Long

        Bottom As Long

End Type

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
 

Private Sub Command1_Click()

       Dim NotepadRect As RECT

       Dim NotepadHandle As Long

 

       NotepadHandle = FindWindow("Notepad", "Untitled - Notepad")

 

       GetWindowRect NotepadHandle, NotepadRect

       MsgBox ("Top = " & NotepadRect.Top & _

           vbCrLf & "Bottom = " & NotepadRect.Bottom & _

           vbCrLf & "Left = " & NotepadRect.Left & _

           vbCrLf & "Right = " & NotepadRect.Right)

End Sub

Open in new window

0
 
LVL 85

Expert Comment

by:Mike Tomlinson
Comment Utility
If you're using VB.Net then you need to change all occurences of "Long" to "Integer".
0
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 

Author Comment

by:soriega
Comment Utility
This doesn't work in my visual studio 2005, it instructs me to use "structure" instead

Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
0
 
LVL 85

Expert Comment

by:Mike Tomlinson
Comment Utility
The code he gave you is for VB6...

For VB.Net:
    Public Structure RECT

        Public Left As Integer

        Public Top As Integer

        Public Right As Integer

        Public Bottom As Integer

    End Structure
 

    Private Declare Function GetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hWnd As IntPtr, ByRef lpRect As RECT) As Integer
 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim r As RECT

        Call GetWindowRect(Me.Handle, r)

        Debug.WriteLine("Left = " & r.Left)

        Debug.WriteLine("Top = " & r.Top)

        Debug.WriteLine("Right = " & r.Right)

        Debug.WriteLine("Bottom = " & r.Bottom)

    End Sub

Open in new window

0
 
LVL 10

Accepted Solution

by:
Clif earned 150 total points
Comment Utility
Sorry (again) I missed that you were using VB.Net

One last time (withfeeling):
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer

    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Integer, ByRef lpRect As RECT) As Integer

    Private Structure RECT

        Dim RectLeft As Integer

        Dim RectTop As Integer

        Dim RectRight As Integer

        Dim RectBottom As Integer

    End Structure
 
 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim NotepadRect As RECT

        Dim NotepadHandle As Integer
 

        NotepadHandle = FindWindow("Notepad", "Untitled - Notepad")
 

        GetWindowRect(NotepadHandle, NotepadRect)

        MsgBox("Top = " & NotepadRect.RectTop & vbCrLf & "Bottom = " & NotepadRect.RectBottom & vbCrLf & "Left = " & NotepadRect.RectLeft & vbCrLf & "Right = " & NotepadRect.RectRight)

    End Sub

Open in new window

0
 

Author Comment

by:soriega
Comment Utility
That seems to be the solution, i will just have to test it on my "popupscreen", works fine on notepad though. Great Work! 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

Have you ever wanted to restrict the users input in a textbox to numbers, and while doing that make sure that they can't 'cheat' by pasting in non-numeric text? Of course you can do that with code you write yourself but it's tedious and error-prone …
Background What I'm presenting in this article is the result of 2 conditions in my work area: We have a SQL Server production environment but no development or test environment; andWe have an MS Access front end using tables in SQL Server but we a…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
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…

744 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

15 Experts available now in Live!

Get 1:1 Help Now