선언:

C#

[DllImport("user32")]
public static extern IntPtr WindowFromPoint(POINT pt);


VB.NET

<DllImport("user32")> _
Public Shared Function WindowFromPoint(pt As POINT) As IntPtr
End Function




사용 예제:

C#

using System;
using System.Runtime.InteropServices;

namespace ApiReference {
    class ApiExample {
        public struct POINT {
            public Int32 x;
            public Int32 y;
        }
        
        [DllImport("user32")]
        public static extern IntPtr WindowFromPoint(POINT pt);
        
        public static void Main(string[] args) {
        EnterX:
            Console.Write("윈도우가 있는지 확인할 X 좌표를 입력하세요: ");
            Int32 x;
            try {
                x = Int32.Parse(Console.ReadLine());
            } catch (Exception) {
                Console.WriteLine("다시 입력하세요");
                goto EnterX;
            }
        EnterY:
            Console.Write("윈도우가 있는지 확인할 Y 좌표를 입력하세요: ");
            Int32 y;
            try {
                y = Int32.Parse(Console.ReadLine());
            } catch (Exception) {
                Console.WriteLine("다시 입력하세요");
                goto EnterY;
            }
            
            Console.WriteLine("{0}, {1} 에 있는 윈도우의 핸들은?", x, y);
            POINT pt;
            pt.x = x;
            pt.y = y;
            
            IntPtr hWnd = WindowFromPoint(pt);
            if ( hWnd == IntPtr.Zero ) 
                Console.WriteLine("위치에 윈도우 창이 없네요...");
            else 
                Console.WriteLine("{0:X8} 입니다!", hWnd.ToInt32());
            
            Console.ReadKey(true);
        }
    }
}


VB.NET

Imports System
Imports System.Runtime.InteropServices

Namespace ApiReference
    Class ApiExample
        Public Structure POINT
            Public x As Int32
            Public y As Int32
        End Structure

        <DllImport("user32")> _
        Public Shared Function WindowFromPoint(pt As POINT) As IntPtr
        End Function

        Public Shared Sub Main(args As String())
            EnterX:
            Console.Write("윈도우가 있는지 확인할 X 좌표를 입력하세요: ")
            Dim x As Int32
            Try
                x = Int32.Parse(Console.ReadLine())
            Catch generatedExceptionName As Exception
                Console.WriteLine("다시 입력하세요")
                GoTo EnterX
            End Try
            EnterY:
            Console.Write("윈도우가 있는지 확인할 Y 좌표를 입력하세요: ")
            Dim y As Int32
            Try
                y = Int32.Parse(Console.ReadLine())
            Catch generatedExceptionName As Exception
                Console.WriteLine("다시 입력하세요")
                GoTo EnterY
            End Try

            Console.WriteLine("{0}, {1} 에 있는 윈도우의 핸들은?", x, y)
            Dim pt As POINT
            pt.x = x
            pt.y = y

            Dim hWnd As IntPtr = WindowFromPoint(pt)
            If hWnd = IntPtr.Zero Then
                Console.WriteLine("위치에 윈도우 창이 없네요...")
            Else
                Console.WriteLine("{0:X8} 입니다!", hWnd.ToInt32())
            End If

            Console.ReadKey(True)
        End Sub
    End Class
End Namespace




예제 실행 결과:




매개 변수 설명:

pt - 핸들을 가져올 윈도우가 있는 위치를 입력합니다.




API 설명:

지정된 위치에 있는 윈도우의 핸들을 가져옵니다.




참고:

WindowFromPoint (MSDN)




비고:

지정된 위치에 있는 컨트롤의 핸들을 가져옵니다. 컨트롤이 자식을 포함하고 있는 경우엔 자식 컨트롤의

위치를 입력하여도, 자식 컨트롤을 포함하는 컨트롤의 핸들을 가져옵니다.

Spy++ 프로그램도 이 API와 ChildWindowFromPoint API를 겸하여 사용합니다.

ChildWindowFromPoint API에 대한 내용은 다음에 다루도록 하겠습니다.



'API Reference' 카테고리의 다른 글

12. MapWindowPoints  (0) 2014.09.21
11. ChildWindowFromPoint  (0) 2014.09.20
9. Process32First, Process32Next  (0) 2014.09.18
8. CreateToolhelp32Snapshot  (0) 2014.09.16
7. CloseHandle  (0) 2014.09.11

+ Recent posts