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

x
?
Solved

X,Y coordinates of a window

Posted on 2008-06-13
8
Medium Priority
?
342 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
ID: 21780776
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
ID: 21780884
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
ID: 21780965
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
Learn Veeam advantages over legacy backup

Every day, more and more legacy backup customers switch to Veeam. Technologies designed for the client-server era cannot restore any IT service running in the hybrid cloud within seconds. Learn top Veeam advantages over legacy backup and get Veeam for the price of your renewal

 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 21780967
If you're using VB.Net then you need to change all occurences of "Long" to "Integer".
0
 

Author Comment

by:soriega
ID: 21781059
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 86

Expert Comment

by:Mike Tomlinson
ID: 21781108
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 600 total points
ID: 21781188
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
ID: 21781248
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

Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

Question has a verified solution.

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

When trying to find the cause of a problem in VBA or VB6 it's often valuable to know what procedures were executed prior to the error. You can use the Call Stack for that but it is often inadequate because it may show procedures you aren't intereste…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
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…
Suggested Courses

772 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