C# 윈도우 위치,크기 정보얻기 GetWindowPlacement
.NET/WinAPI 2014. 1. 6. 19:44
GetWindowPlacement
실행중인 응용프로그램 창의 위치와 사이즈를 얻어낼 때 사용한다.
선언:
[DllImport("user32.dll")] internal static extern bool GetWindowPlacement(int hWnd, ref WINDOWPLACEMENT lpwndpl);
함수 정의:
internal struct WINDOWPLACEMENT { public int length; public int flags; public ShowWindowCommands showCmd; public System.Drawing.Point ptMinPosition; public System.Drawing.Point ptMaxPosition; public System.Drawing.Rectangle rcNormalPosition; } internal enum ShowWindowCommands : int { Hide = 0, Normal = 1, Minimized = 2, Maximized = 3, } internal enum WNDSTATE : int { SW_HIDE = 0, SW_SHOWNORMAL = 1, SW_NORMAL = 1, SW_SHOWMINIMIZED = 2, SW_MAXIMIZE = 3, SW_SHOWNOACTIVATE = 4, SW_SHOW = 5, SW_MINIMIZE = 6, SW_SHOWMINNOACTIVE = 7, SW_SHOWNA = 8, SW_RESTORE = 9, SW_SHOWDEFAULT = 10, SW_MAX = 10 } private static WINDOWPLACEMENT GetPlacement(int hwnd) { WINDOWPLACEMENT placement = new WINDOWPLACEMENT(); placement.length = Marshal.SizeOf(placement); GetWindowPlacement(hwnd, ref placement); return placement; } private void GetWindowPos(int hwnd, ref int ptrPhwnd, ref int ptrNhwnd, ref Point ptPoint, ref Size szSize, ref WNDSTATE intShowCmd) { WINDOWPLACEMENT wInf = new WINDOWPLACEMENT(); wInf.length = System.Runtime.InteropServices.Marshal.SizeOf(wInf); GetWindowPlacement(hwnd, ref wInf); szSize = new Size(wInf.rcNormalPosition.Right - (wInf.rcNormalPosition.Left * 2),wInf.rcNormalPosition.Bottom - (wInf.rcNormalPosition.Top * 2)); ptPoint = new Point(wInf.rcNormalPosition.Left, wInf.rcNormalPosition.Top); }
호출 :
GetWindowPos(핸들, ref ptrPhwnd, ref ptrNhwnd, ref ptPoint, ref szSize, ref intShowCmd);
핸들은 FindWindow 참고
ptPoint의 X, Y에 위치값이 저장되는데 이는 윈도우프레임을 포함한 LEFT, UP이다.
사이즈역시 프레임까지 포함된 크기이다.
특정 창의 전체영역이나 일부분을 캡쳐한다거나 입력도구의 입력을 발생시키거나 할때,
그 창이 어느위치에 있던지 상관없이 적용시킬 수 있다.
특정 부분의 좌표를 이용할때는, 프레임크기 변화에 의한 범용성을 신경써 주어야한다.
예를들어,
윈도우7의 Aero스타일의 창프레임에 비해 고전스타일의 프레임은 가로 4px, 세로7px만큼 작게 나온다.
Aero에서 ptPoint.X + 100, ptPoint.Y + 100 의 위치는
고전스타일에서 ptPoint.X + 96, ptPoint.Y + 93 이다.
'.NET > WinAPI' 카테고리의 다른 글
C# 키보드이벤트 (0) | 2014.01.19 |
---|---|
C# 마우스이벤트 (0) | 2014.01.18 |
C# 핫키 설정 RegisterHotKey (0) | 2013.12.28 |
C# 윈도우핸들 얻기 FindWindow (0) | 2013.12.20 |
C#에 Windows API 사용하기 (0) | 2013.12.19 |