■ GetMonitorInfo API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
using System.Runtime.InteropServices; using System.Runtime.Versioning; #region 모니터 정보 구하기 - GetMonitorInfo(monitorHandleRef, monitorInfo) /// <summary> /// 모니터 정보 구하기 /// </summary> /// <param name="monitorHandleRef">모니터 참조 핸들</param> /// <param name="monitorInfo">모니터 정보</param> /// <returns>처리 결과</returns> [DllImport("user32", CharSet = CharSet.Auto)] [ResourceExposure(ResourceScope.None)] private static extern bool GetMonitorInfo(HandleRef monitorHandleRef, [In, Out]MONITOR_INFORMATION monitorInfo); #endregion /// <summary> /// 사각형 /// </summary> [StructLayout(LayoutKind.Sequential)] public struct RECTANGLE { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Public #region Field /// <summary> /// 왼쪽 /// </summary> public int Left; /// <summary> /// 위쪽 /// </summary> public int Top; /// <summary> /// 오른쪽 /// </summary> public int Right; /// <summary> /// 아래쪽 /// </summary> public int Bottom; #endregion } /// <summary> /// 모니터 정보 /// </summary> [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)] public class MONITOR_INFORMATION { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Public #region Field /// <summary> /// 크기 /// </summary> public int Size = Marshal.SizeOf(typeof(MONITOR_INFORMATION)); /// <summary> /// 디스플레이 사각형 /// </summary> public RECTANGLE DisplayRectangle = new RECTANGLE(); /// <summary> /// 작업 영역 사각형 /// </summary> public RECTANGLE WorkingAreaRectangle = new RECTANGLE(); /// <summary> /// 플래그 /// </summary> public int Flag = 0; /// <summary> /// 장치명 /// </summary> [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public char[] DeviceName = new char[32]; #endregion } |
■ GetMonitorInfo API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
using System; using System.Runtime.InteropServices; #region 모니터 정보 구하기 - GetMonitorInfo(monitorHandle, monitorInfo) /// <summary> /// 모니터 정보 구하기 /// </summary> /// <param name="monitorHandle">모니터 핸들</param> /// <param name="monitorInfo">모니터 정보</param> /// <returns>처리 결과</returns> [DllImport("user32", CharSet = CharSet.Auto, SetLastError = true)] private static extern bool GetMonitorInfo(IntPtr monitorHandle, ref MONITOR_INFO_EX monitorInfo); #endregion /// <summary> /// 사각형 /// </summary> [StructLayout(LayoutKind.Sequential)] public struct RECTANGLE { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Public #region Field /// <summary> /// 왼쪽 /// </summary> public int Left; /// <summary> /// 위쪽 /// </summary> public int Top; /// <summary> /// 오른쪽 /// </summary> public int Right; /// <summary> /// 아래쪽 /// </summary> public int Bottom; #endregion } /// <summary> /// 모니터 정보 확장 /// </summary> [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)] public struct MONITOR_INFO_EX { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Public #region Field /// <summary> /// 크기 /// </summary> public uint Size; /// <summary> /// 디스플레이 사각형 /// </summary> public RECTANGLE DisplayRectangle; /// <summary> /// 작업 영역 사각형 /// </summary> public RECTANGLE WorkingAreaRectangle; /// <summary> /// 플래그 /// </summary> public uint Flag; /// <summary> /// 장치명 /// </summary> [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public char[] DeviceName; #endregion } |
■ MonitorFromPoint API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
using System; using System.Drawing; using System.Runtime.InteropServices; #region 포인트에서 모니터 구하기 - MonitorFromPoint(point, flag) /// <summary> /// 포인트에서 모니터 구하기 /// </summary> /// <param name="point">포인트</param> /// <param name="flag">플래그</param> /// <returns>모니터 핸들</returns> [DllImport("user32", CharSet = CharSet.Auto, ExactSpelling = true)] private static extern IntPtr MonitorFromPoint(Point point, uint flag); #endregion |
■ SetWindowPos API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
using System; using System.Runtime.InteropServices; #region 윈도우 위치 설정하기 - SetWindowPos(windowHandle, windowHandleInsertAfter, x, y, width, height, flag) /// <summary> /// 윈도우 위치 설정하기 /// </summary> /// <param name="windowHandle">윈도우 핸들</param> /// <param name="windowHandleInsertAfter">삽입 이후 윈도우 핸들</param> /// <param name="x">X</param> /// <param name="y">Y</param> /// <param name="width">너비</param> /// <param name="height">높이</param> /// <param name="flag">플래그</param> /// <returns>처리 결과</returns> [DllImport("user32")] private static extern bool SetWindowPos ( IntPtr windowHandle, IntPtr windowHandleInsertAfter, int x, int y, int width, int height, uint flag ); #endregion |
■ AttachThreadInput API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
using System.Runtime.InteropServices; #region 스레드 입력 연결하기 - AttachThreadInput(sourceThreadID, targetThreadID, attach) /// <summary> /// 스레드 입력 연결하기 /// </summary> /// <param name="sourceThreadID">소스 스레드 ID</param> /// <param name="targetThreadID">타겟 스레드 ID</param> /// <param name="attach">연결 여부</param> /// <returns>처리 결과</returns> [DllImport("user32")] private static extern bool AttachThreadInput(uint sourceThreadID, uint targetThreadID, bool attach); #endregion |
■ GetForegroundWindow API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System; using System.Runtime.InteropServices; #region 전경 윈도우 구하기 - GetForegroundWindow() /// <summary> /// 전경 윈도우 구하기 /// </summary> /// <returns>윈도우 핸들</returns> [DllImport("user32")] private static extern IntPtr GetForegroundWindow(); #endregion |
■ GetWindowThreadProcessId API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
using System; using System.Runtime.InteropServices; #region 윈도우 스레드 프로세스 ID 구하기 - GetWindowThreadProcessId(windowHandle, processID) /// <summary> /// 윈도우 스레드 프로세스 ID 구하기 /// </summary> /// <param name="windowHandle">윈도우 핸들</param> /// <param name="processID">프로세스 ID</param> /// <returns>스레드 ID</returns> [DllImport("user32")] private static extern uint GetWindowThreadProcessId(IntPtr windowHandle, out IntPtr processID); #endregion |
■ ShowCursor API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System.Runtime.InteropServices; #region 커서 표시하기 - ShowCursor(show) /// <summary> /// 커서 표시하기 /// </summary> /// <param name="show">표시 여부</param> /// <returns>디스플레이 카운트</returns> [DllImport("user32")] private static extern int ShowCursor(bool show); #endregion |
■ BlockInput API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System.Runtime.InteropServices; #region 입력 방지하기 - BlockInput(blocking) /// <summary> /// 입력 방지하기 /// </summary> /// <param name="blocking">입력 방지 여부</param> /// <returns>처리 결과</returns> [return: MarshalAs(UnmanagedType.Bool)] [DllImport("user32", CharSet = CharSet.Auto, ExactSpelling = true)] private static extern bool BlockInput([In, MarshalAs(UnmanagedType.Bool)]bool blocking); #endregion |
■ ShowWindow API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
using System.Runtime.InteropServices; #region 윈도우 표시하기 - ShowWindow(windowHandle, command) /// <summary> /// 윈도우 표시하기 /// </summary> /// <param name="windowHandle">윈도우 핸들</param> /// <param name="command">명령</param> /// <returns>처리 결과</returns> [DllImport("user32")] private static extern int ShowWindow(int windowHandle, int command); #endregion /// <summary> /// SW_HIDE /// </summary> private const int SW_HIDE = 0; /// <summary> /// SW_SHOW /// </summary> private const int SW_SHOW = 1; |
■ FindWindow API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System.Runtime.InteropServices; #region 윈도우 찾기 - FindWindow(className, windowText) /// <summary> /// 윈도우 찾기 /// </summary> /// <param name="className">클래스명</param> /// <param name="windowText">윈도우 텍스트</param> /// <returns>윈도우 핸들</returns> [DllImport("user32")] private static extern int FindWindow(string className, string windowText); #endregion |
■ SetCursorPos API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System.Runtime.InteropServices; #region 커서 위치 설정하기 - SetCursorPos(x, y) /// <summary> /// 커서 위치 설정하기 /// </summary> /// <param name="x">X 좌표</param> /// <param name="y">Y 좌표</param> /// <returns>처리 결과</returns> [DllImport("user32")] private static extern bool SetCursorPos(int x, int y); #endregion |
■ ExitWindowsEx API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System.Runtime.InteropServices; #region 윈도우 종료하기 - ExitWindowsEx(flag, reserved) /// <summary> /// 윈도우 종료하기 /// </summary> /// <param name="flag">플래그</param> /// <param name="reserved">예약</param> /// <returns>처리 결과</returns> [DllImport("user32", ExactSpelling=true, SetLastError=true) ] private static extern bool ExitWindowsEx(int flag, int reserved); #endregion |
■ ExitWindowsEx API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System.Runtime.InteropServices; #region 윈도우즈 종료하기 (확장) - ExitWindowsEx(flag, reason) /// <summary> /// 윈도우즈 종료하기 (확장) /// </summary> /// <param name="flag">플래그</param> /// <param name="reason">이유</param> /// <returns>처리 결과</returns> [DllImport("user32")] private static extern bool ExitWindowsEx(uint flag, uint reason); #endregion |
■ LockWorkStation API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System.Runtime.InteropServices; #region 워크스테이션 잠그기 - LockWorkStation() /// <summary> /// 워크스테이션 잠그기 /// </summary> [DllImport("user32")] private static extern void LockWorkStation(); #endregion |
■ MonitorFromWindow API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
using System; using System.Runtime.InteropServices; #region 윈도우에서 모니터 핸들 구하기 - MonitorFromWindow(windowHandle, defaultType) /// <summary> /// 윈도우에서 모니터 핸들 구하기 /// </summary> /// <param name="windowHandle">윈도우 핸들</param> /// <param name="defaultType">모니터 디폴트 타입</param> /// <returns>모니터 핸들</returns> [DllImport("user32", CharSet = CharSet.Unicode, SetLastError = true)] private static extern IntPtr MonitorFromWindow(IntPtr windowHandle, MonitorDefaultType defaultType); #endregion /// <summary> /// 모니터 디폴트 타입 /// </summary> public enum MonitorDefaultType { /// <summary> /// MONITOR_DEFAULTTONULL /// </summary> MONITOR_DEFAULTTONULL = 0, /// <summary> /// MONITOR_DEFAULTTOPRIMARY /// </summary> MONITOR_DEFAULTTOPRIMARY = 1, /// <summary> /// MONITOR_DEFAULTTONEAREST /// </summary> MONITOR_DEFAULTTONEAREST = 2, } |
■ SetProcessDPIAware API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System; using System.Runtime.InteropServices; using System.Windows.Forms; #region 프로세스 DPI 인식 설정하기 - SetProcessDPIAware() /// <summary> /// 프로세스 DPI 인식 설정하기 /// </summary> /// <returns>처리 결과</returns> [DllImport("user32")] private static extern bool SetProcessDPIAware(); #endregion |
■ mouse_event API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
using System; using System.Runtime.InteropServices; #region 마우스 이벤트 발생시키기 - mouse_event(flag, deltaX, deltaY, data, extraInformation) /// <summary> /// 마우스 이벤트 발생시키기 /// </summary> /// <param name="flag">플래그</param> /// <param name="deltaX">델타 X</param> /// <param name="deltaY">델타 Y</param> /// <param name="data">데이터</param> /// <param name="extraInformation">부가 정보</param> [DllImport("user32")] private static extern void mouse_event(int flag, int deltaX, int deltaY, int data, UIntPtr extraInformation); #endregion |
■ SendMessage API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
using System; using System.Runtime.InteropServices; #region 메시지 보내기 - SendMessage(windowHandle, message, wordParameter, longParameter) /// <summary> /// 메시지 보내기 /// </summary> /// <param name="windowHandle">윈도우 핸들</param> /// <param name="message">메시지</param> /// <param name="wordParameter">WORD 매개 변수</param> /// <param name="longParameter">LONG 매개 변수</param> /// <returns>처리 결과</returns> [DllImport("user32", CharSet = CharSet.Auto)] private static extern IntPtr SendMessage(IntPtr windowHandle, uint message, IntPtr wordParameter, IntPtr longParameter); #endregion |
■ SendMessage API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
using System.Runtime.InteropServices; #region 메시지 보내기 - SendMessage(windowHandle, message, wordParameter, longParameter) /// <summary> /// 메시지 보내기 /// </summary> /// <param name="windowHandle">윈도우 핸들</param> /// <param name="message">메시지</param> /// <param name="wordParameter">WORD 매개 변수</param> /// <param name="longParameter">LONG 매개 변수</param> /// <returns>처리 결과</returns> [DllImport("user32")] private static extern int SendMessage(int windowHandle, short message, int wordParameter, int longParameter); #endregion |
■ GetActiveWindow API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System; using System.Runtime.InteropServices; #region 활성 윈도우 구하기 - GetActiveWindow() /// <summary> /// 활성 윈도우 구하기 /// </summary> /// <returns>활성 윈도우 핸들</returns> [DllImport("user32")] private static extern IntPtr GetActiveWindow(); #endregion |
■ SetForegroundWindow API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
using System; using System.Runtime.InteropServices; #region 활성 윈도우 설정하기 - SetForegroundWindow(windowHandle) /// <summary> /// 활성 윈도우 설정하기 /// </summary> /// <param name="windowHandle">윈도우 핸들</param> /// <returns>처리 결과</returns> [DllImport("user32")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool SetForegroundWindow(IntPtr windowHandle); #endregion |
■ FindWindowEx API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
using System; using System.Runtime.InteropServices; #region 윈도우 찾기 (확장) - FindWindowEx(parentWindowHandle, childAfterWindowHandle, className, windowText) /// <summary> /// 윈도우 찾기 (확장) /// </summary> /// <param name="parentWindowHandle">부모 윈도우 핸들</param> /// <param name="childAfterWindowHandle">찾기 이후 자식 윈도우 핸들</param> /// <param name="className">클래스명</param> /// <param name="windowText">윈도우 텍스트</param> /// <returns>윈도우 핸들</returns> [DllImport("user32")] private static extern IntPtr FindWindowEx ( IntPtr parentWindowHandle, IntPtr childAfterWindowHandle, string className, string windowText ); #endregion |
■ GetMessageExtraInfo API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System; using System.Runtime.InteropServices; #region 메시지 부가 정보 구하기 - GetMessageExtraInfo() /// <summary> /// 메시지 부가 정보 구하기 /// </summary> /// <returns>메시지 부가 정보 핸들</returns> [DllImport("user32", CharSet = CharSet.Auto)] private static extern UIntPtr GetMessageExtraInfo(); #endregion |
■ FindWindow API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
using System; using System.Runtime.InteropServices; #region 윈도우 찾기 - FindWindow(className, windowText) /// <summary> /// 윈도우 찾기 /// </summary> /// <param name="className">클래스명</param> /// <param name="windowText">윈도우 텍스트</param> /// <returns>윈도우 핸들</returns> [DllImport("user32", SetLastError = true)] private static extern IntPtr FindWindow(string className, string windowText); #endregion |