■ GetCurrentPackageFullName API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
using System.Runtime.InteropServices; using System.Text; #region 현재 패키지 전체 명칭 구하기 - GetCurrentPackageFullName(packageFullNameLength, packageFullNameStringBuilder) /// <summary> /// 현재 패키지 전체 명칭 구하기 /// </summary> /// <param name="packageFullNameLength">패키지 전체 명칭 길이</param> /// <param name="packageFullNameStringBuilder">패키지 전체 명칭 문자열 빌더</param> /// <returns>처리 결과</returns> [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] private static extern int GetCurrentPackageFullName(ref int packageFullNameLength, StringBuilder packageFullNameStringBuilder); #endregion |
■ GetCurrentThreadId API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System.Runtime.InteropServices; #region 현재 스레드 ID 구하기 - GetCurrentThreadId() /// <summary> /// 현재 스레드 ID 구하기 /// </summary> /// <returns>현재 스레드 ID</returns> [DllImport("kernel32")] private static extern uint GetCurrentThreadId(); #endregion |
■ GetCurrentConsoleFontEx 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
|
using System; using System.Runtime.InteropServices; #region 현재 콘솔 폰트 구하기 (확장) - GetCurrentConsoleFontEx(consoleOutputHandle, maximumWindow, fontInfo) /// <summary> /// 현재 콘솔 폰트 구하기 (확장) /// </summary> /// <param name="consoleOutputHandle">콘솔 출력 핸들</param> /// <param name="maximumWindow">최대 윈도우 여부</param> /// <param name="fontInfo">폰트 정보</param> /// <returns>처리 결과</returns> [return: MarshalAs(UnmanagedType.Bool)] [DllImport("kernel32", SetLastError = true, CharSet = CharSet.Unicode)] private static extern bool GetCurrentConsoleFontEx(IntPtr consoleOutputHandle, bool maximumWindow, ref FontInfo fontInfo); #endregion /// <summary> /// 폰트 정보 /// </summary> [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct FontInfo { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Public #region Field /// <summary> /// 크기 /// </summary> public int Size; /// <summary> /// 폰트 인덱스 /// </summary> public int FontIndex; /// <summary> /// 폰트 너비 /// </summary> public short FontWidth; /// <summary> /// 폰트 크기 /// </summary> public short FontSize; /// <summary> /// 폰트 패밀리 /// </summary> public int FontFamily; /// <summary> /// 폰트 가중치 /// </summary> public int FontWeight; /// <summary> /// 폰트명 /// </summary> [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string FontName; #endregion } |
■ SetCurrentConsoleFontEx 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
|
using System; using System.Runtime.InteropServices; #region 현재 콘솔 폰트 설정하기 (확장) - SetCurrentConsoleFontEx(consoleOutputHandle, maximumWindow, fontInfo) /// <summary> /// 현재 콘솔 폰트 설정하기 (확장) /// </summary> /// <param name="consoleOutputHandle">콘솔 출력 핸들</param> /// <param name="maximumWindow">최대 윈도우 여부</param> /// <param name="fontInfo">폰트 정보</param> /// <returns>처리 결과</returns> [return: MarshalAs(UnmanagedType.Bool)] [DllImport("kernel32", SetLastError = true, CharSet = CharSet.Unicode)] private static extern bool SetCurrentConsoleFontEx(IntPtr consoleOutputHandle, bool maximumWindow, ref FontInfo fontInfo); #endregion /// <summary> /// 폰트 정보 /// </summary> [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct FontInfo { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Public #region Field /// <summary> /// 크기 /// </summary> public int Size; /// <summary> /// 폰트 인덱스 /// </summary> public int FontIndex; /// <summary> /// 폰트 너비 /// </summary> public short FontWidth; /// <summary> /// 폰트 크기 /// </summary> public short FontSize; /// <summary> /// 폰트 패밀리 /// </summary> public int FontFamily; /// <summary> /// 폰트 가중치 /// </summary> public int FontWeight; /// <summary> /// 폰트명 /// </summary> [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string FontName; #endregion } |
■ AssignProcessToJobObject 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 작업 객체에 프로세스 할당하기 - AssignProcessToJobObject(jobHandle, processHandle) /// <summary> /// 작업 객체에 프로세스 할당하기 /// </summary> /// <param name="jobHandle">작업 핸들</param> /// <param name="processHandle">프로세스 핸들</param> /// <returns>처리 결과</returns> [DllImport("kernel32", SetLastError = true)] private static extern bool AssignProcessToJobObject(IntPtr jobHandle, IntPtr processHandle); #endregion |
■ SetInformationJobObject 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
|
using System; using System.Runtime.InteropServices; #region 작업 객체 정보 설정하기 - SetInformationJobObject(jobHandle, jobObjectInformationType, jobObjectInformationHandle, jobObjectInformationLength) /// <summary> /// 작업 객체 정보 설정하기 /// </summary> /// <param name="jobHandle">작업 핸들</param> /// <param name="jobObjectInformationType">작업 객체 정보 타입</param> /// <param name="jobObjectInformationHandle">작업 객체 정보 핸들</param> /// <param name="jobObjectInformationLength">작업 객체 정보 길이</param> /// <returns>처리 결과</returns> [DllImport("kernel32")] private static extern bool SetInformationJobObject ( IntPtr jobHandle, JobObjectInformationType jobObjectInformationType, IntPtr jobObjectInformationHandle, uint jobObjectInformationLength ); #endregion /// <summary> /// 작업 객체 정보 타입 /// </summary> public enum JobObjectInformationType { /// <summary> /// Associate Completion Port Information /// </summary> AssociateCompletionPortInformation = 7, /// <summary> /// Basic Limit Information /// </summary> BasicLimitInformation = 2, /// <summary> /// Basic UI Restrictions /// </summary> BasicUIRestrictions = 4, /// <summary> /// End Of Job Time Information /// </summary> EndOfJobTimeInformation = 6, /// <summary> /// Extended Limit Information /// </summary> ExtendedLimitInformation = 9, /// <summary> /// Security Limit Information /// </summary> SecurityLimitInformation = 5, /// <summary> /// Group Information /// </summary> GroupInformation = 11 } |
■ CreateJobObject 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 작업 객체 생성하기 - CreateJobObject(jobAttributesHandle, name) /// <summary> /// 작업 객체 생성하기 /// </summary> /// <param name="jobAttributesHandle">작업 특성 핸들</param> /// <param name="name">명칭</param> /// <returns>작업 핸들</returns> [DllImport("kernel32", CharSet = CharSet.Unicode)] private static extern IntPtr CreateJobObject(IntPtr jobAttributesHandle, string name); #endregion |
■ IsWow64Process API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
using System; using System.Runtime.InteropServices; #region WOW 64비트 프로세스 여부 구하기 - IsWow64Process(processHandle, isWOW64Process) /// <summary> /// WOW 64비트 프로세스 여부 구하기 /// </summary> /// <param name="processHandle">프로세스 핸들</param> /// <param name="isWOW64Process">WOW 64비트 프로세스 여부</param> /// <returns>처리 결과</returns> [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool IsWow64Process(IntPtr processHandle, out bool isWOW64BitProcess); #endregion |
■ GetProcAddress 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 프로시저 주소 구하기 - GetProcAddress(moduleHandle, procedureName) /// <summary> /// 프로시저 주소 구하기 /// </summary> /// <param name="moduleHandle">모듈 핸들</param> /// <param name="procedureName">프로시저명</param> /// <returns>프로시저 핸들</returns> [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr GetProcAddress(IntPtr moduleHandle, [MarshalAs(UnmanagedType.LPStr)] string procedureName); #endregion |
■ GetCurrentProcess API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System; using System.Runtime.InteropServices; #region 현재 프로세스 구하기 - GetCurrentProcess() /// <summary> /// 현재 프로세스 구하기 /// </summary> /// <returns>현재 프로세스 핸들</returns> [DllImport("kernel32")] private static extern IntPtr GetCurrentProcess(); #endregion |
■ GetProcAddress 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 프로시저 주소 구하기 - GetProcAddress(moduleHandle, procedureName) /// <summary> /// 프로시저 주소 구하기 /// </summary> /// <param name="moduleHandle">모듈 핸들</param> /// <param name="procedureName">프로시저명</param> /// <returns>프로시저 핸들</returns> [DllImport("kernel32", SetLastError = true, CallingConvention = CallingConvention.Winapi)] private extern static IntPtr GetProcAddress(IntPtr moduleHandle, string procedureName); #endregion |
■ LoadLibrary API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System; using System.Runtime.InteropServices; #region 라이브러리 로드하기 - LoadLibrary(filePath) /// <summary> /// 라이브러리 로드하기 /// </summary> /// <param name="filePath">파일 경로</param> /// <returns>처리 결과</returns> [DllImport("kernel32", SetLastError = true, CallingConvention = CallingConvention.Winapi)] private extern static IntPtr LoadLibrary(string filePath); #endregion |
■ IsWow64Process API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
using System; using System.Runtime.InteropServices; #region WOW 64비트 프로세스 여부 구하기 - IsWow64Process(processHandle, isWOW64Process) /// <summary> /// WOW 64비트 프로세스 여부 구하기 /// </summary> /// <param name="processHandle">프로세스 핸들</param> /// <param name="isWOW64Process">WOW 64비트 프로세스 여부</param> /// <returns>처리 결과</returns> [DllImport("kernel32", SetLastError = true, CallingConvention = CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool IsWow64Process([In] IntPtr processHandle, [Out] out bool isWOW64Process); #endregion |
■ QueryPerformanceFrequency API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System.Runtime.InteropServices; #region 성능 주기 조사하기 - QueryPerformanceFrequency(performanceFrequency) /// <summary> /// 성능 주기 조사하기 /// </summary> /// <param name="performanceFrequency">성능 주기</param> /// <returns>처리 결과</returns> [DllImport("kernel32", SetLastError = true)] private static extern int QueryPerformanceFrequency(ref long performanceFrequency); #endregion |
■ GetSystemTime 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
|
using System; using System.Runtime.InteropServices; #region 시스템 시간 구하기 - GetSystemTime(systemTime) /// <summary> /// 시스템 시간 구하기 /// </summary> /// <param name="systemTime">시스템 시간</param> /// <returns>처리 결과</returns> [DllImport("kernel32", SetLastError = true)] private static extern int GetSystemTime(out SYSTEMTIME systemTime); #endregion /// <summary> /// 시스템 시간 /// </summary> [StructLayout(LayoutKind.Sequential)] public struct SYSTEMTIME { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Public #region Field /// <summary> /// 연도 /// </summary> public ushort Year; /// <summary> /// 월 /// </summary> public ushort Month; /// <summary> /// 요일 /// </summary> public ushort DayOfWeek; /// <summary> /// 일 /// </summary> public ushort Day; /// <summary> /// 시 /// </summary> public ushort Hour; /// <summary> /// 분 /// </summary> public ushort Minute; /// <summary> /// 초 /// </summary> public ushort Second; /// <summary> /// 밀리초 /// </summary> public ushort Millisecond; #endregion } |
■ QueryPerformanceCounter API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System.Runtime.InteropServices; #region 성능 계수 조사하기 - QueryPerformanceCounter(performanceCount) /// <summary> /// 성능 계수 조사하기 /// </summary> /// <param name="performanceCount">성능 계수</param> /// <returns>처리 결과</returns> [DllImport("kernel32", SetLastError = true)] private static extern int QueryPerformanceCounter(ref long performanceCount); #endregion |
■ SetSystemTime 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
|
using System; using System.Runtime.InteropServices; #region 시스템 시간 설정하기 - SetSystemTime(systemTime) /// <summary> /// 시스템 시간 설정하기 /// </summary> /// <param name="systemTime">시스템 시간</param> /// <returns>처리 결과</returns> [DllImport("kernel32", SetLastError = true)] private static extern int SetSystemTime(ref SYSTEMTIME systemTime); #endregion /// <summary> /// 시스템 시간 /// </summary> [StructLayout(LayoutKind.Sequential)] public struct SYSTEMTIME { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Public #region Field /// <summary> /// 연도 /// </summary> public ushort Year; /// <summary> /// 월 /// </summary> public ushort Month; /// <summary> /// 요일 /// </summary> public ushort DayOfWeek; /// <summary> /// 일 /// </summary> public ushort Day; /// <summary> /// 시 /// </summary> public ushort Hour; /// <summary> /// 분 /// </summary> public ushort Minute; /// <summary> /// 초 /// </summary> public ushort Second; /// <summary> /// 밀리초 /// </summary> public ushort Millisecond; #endregion } |
■ GetStdHandle API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System; using System.Runtime.InteropServices; #region 표준 핸들 구하기 - GetStdHandle(type) /// <summary> /// 표준 핸들 구하기 /// </summary> /// <param name="type">타입</param> /// <returns>표준 핸들</returns> [DllImport("kernel32", SetLastError = true)] private static extern IntPtr GetStdHandle(int type); #endregion |
■ SetCurrentConsoleFontEx 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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
using System; using System.Runtime.InteropServices; #region 현재 콘솔 폰트 설정하기 - SetCurrentConsoleFontEx(outputHandle, maximumWindow, info) /// <summary> /// 현재 콘솔 폰트 설정하기 /// </summary> /// <param name="outputHandle">출력 핸들</param> /// <param name="maximumWindow">최대 창 크기 글꼴 정보 여부</param> /// <param name="info">콘솔 폰트 정보 확장</param> /// <returns>처리 결과</returns> [DllImport("kernel32", SetLastError = true)] private static extern bool SetCurrentConsoleFontEx(IntPtr outputHandle, bool maximumWindow, ref CONSOLE_FONT_INFO_EX info); #endregion /// <summary> /// 좌표 /// </summary> [StructLayout(LayoutKind.Sequential)] public struct COORD { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Public #region Field /// <summary> /// X /// </summary> public short X; /// <summary> /// Y /// </summary> public short Y; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - COORD(x, y) /// <summary> /// 생성자 /// </summary> /// <param name="x">X</param> /// <param name="y">Y</param> public COORD(short x, short y) { X = x; Y = y; } #endregion } /// <summary> /// LF_FACESIZE /// </summary> public const int LF_FACESIZE = 32; /// <summary> /// 콘솔 폰트 정보 확장 /// </summary> [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public unsafe struct CONSOLE_FONT_INFO_EX { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Public #region Field /// <summary> /// 크기 /// </summary> public uint Size; /// <summary> /// 폰트 /// </summary> public uint Font; /// <summary> /// 폰트 크기 /// </summary> public COORD FontSize; /// <summary> /// 폰트 패밀리 /// </summary> public int FontFamily; /// <summary> /// 폰트 가중치 /// </summary> public int FontWeight; /// <summary> /// 페이스명 /// </summary> public fixed char FaceName[LF_FACESIZE]; #endregion } |
■ SetConsoleFont 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 콘솔 폰트 설정하기 - SetConsoleFont(outputHandle, fontNumber) /// <summary> /// 콘솔 폰트 설정하기 /// </summary> /// <param name="outputHandle">출력 핸들</param> /// <param name="fontNumber">폰트 번호</param> /// <returns>처리 결과</returns> [DllImport("kernel32", SetLastError = true)] private static extern int SetConsoleFont(IntPtr outputHandle, uint fontNumber); #endregion |
■ CopyMemory 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 메모리 복사하기 - CopyMemory(targetHandle, sourceHandle, count) /// <summary> /// 메모리 복사하기 /// </summary> /// <param name="targetHandle">타겟 핸들</param> /// <param name="sourceHandle">소스 핸들</param> /// <param name="count">카운트</param> [DllImport("kernel32", EntryPoint = "CopyMemory", SetLastError = false)] private static extern void CopyMemory(IntPtr targetHandle, IntPtr sourceHandle, uint count); #endregion |
■ DeviceIoControl 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
|
using System; using System.Runtime.InteropServices; #region 장치 IO 제어하기 - DeviceIoControl(deviceHandle, ioControlCode, inBuffer, inBufferSize, outBuffer, outBufferSize, byteCountReturned, overlappedHandle) /// <summary> /// 장치 IO 제어하기 /// </summary> /// <param name="deviceHandle">디바이스 핸들</param> /// <param name="ioControlCode">IO 제어 코드</param> /// <param name="inBuffer">입력 버퍼</param> /// <param name="inBufferSize">입력 버퍼 크기</param> /// <param name="outBuffer">출력 버퍼</param> /// <param name="outBufferSize">출력 버퍼 크기</param> /// <param name="byteCountReturned">반환 바이트 수</param> /// <param name="overlappedHandle">중첩 핸들</param> /// <returns>처리 결과</returns> [DllImport("kernel32")] public static extern bool DeviceIoControl ( IntPtr deviceHandle, uint ioControlCode, ref short inBuffer, uint inBufferSize, IntPtr outBuffer, uint outBufferSize, ref uint byteCountReturned, IntPtr overlappedHandle ); #endregion /// <summary> /// FSCTL_SET_COMPRESSION /// </summary> private const uint FSCTL_SET_COMPRESSION = 0x0009C040; /// <summary> /// COMPRESSION_FORMAT_NONE /// </summary> private const short COMPRESSION_FORMAT_NONE = 0; /// <summary> /// COMPRESSION_FORMAT_DEFAULT /// </summary> private const short COMPRESSION_FORMAT_DEFAULT = 1; |
■ GetVolumeInformation 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
|
using System.Runtime.InteropServices; using System.Text; #region 볼륨 정보 구하기 - GetVolumeInformation(driveLetter, volumeNameStringBuilder, volumeNameSize, volumeSerialNumber, maximumComponentLength, FileSystemFlag, fileSystemNameStringBuilder, fileSystemNameSize) /// <summary> /// 볼륨 정보 구하기 /// </summary> /// <param name="driveLetter">드라이브 문자</param> /// <param name="volumeNameStringBuilder">볼륨명 문자열 빌더</param> /// <param name="volumeNameSize">볼륨명 크기</param> /// <param name="volumeSerialNumber">볼륨 시리얼 번호</param> /// <param name="maximumComponentLength">최대 컴포넌트 길이</param> /// <param name="fileSystemFlag">파일 시스템 플래그</param> /// <param name="fileSystemNameStringBuilder">파일 시스템명 문자열 빌더</param> /// <param name="fileSystemNameSize">파일 시스템명 크기</param> /// <returns>처리 결과</returns> [DllImport("kernel32")] private static extern long GetVolumeInformation ( string driveLetter, StringBuilder volumeNameStringBuilder, uint volumeNameSize, ref uint volumeSerialNumber, ref uint maximumComponentLength, ref uint fileSystemFlag, StringBuilder fileSystemNameStringBuilder, uint fileSystemNameSize ); #endregion |
■ SetConsoleCtrlHandler 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
|
using System.Runtime.InteropServices; #region 콘솔 컨트롤 핸들러 설정하기 - SetConsoleCtrlHandler(handler, add) /// <summary> /// 콘솔 컨트롤 핸들러 설정하기 /// </summary> /// <param name="handler">핸들러</param> /// <param name="add">추가 여부</param> /// <returns>처리 결과</returns> [DllImport("kernel32")] private static extern bool SetConsoleCtrlHandler(SetConsoleCtrlHandlerDelegate handler, bool add); #endregion #region 콘솔 컨트롤 핸들러 설정하기 대리자 - SetConsoleCtrlHandlerDelegate(controlType) /// <summary> /// 콘솔 컨트롤 핸들러 설정하기 대리자 /// </summary> /// <param name="controlType">컨트롤 타입</param> /// <returns>처리 결과</returns> private delegate bool SetConsoleCtrlHandlerDelegate(ControlType controlType); #endregion /// <summary> /// 컨트롤 타입 /// </summary> public enum ControlType { /// <summary> /// CTRL_C_EVENT /// </summary> CTRL_C_EVENT = 0, /// <summary> /// CTRL_BREAK_EVENT /// </summary> CTRL_BREAK_EVENT = 1, /// <summary> /// CTRL_CLOSE_EVENT /// </summary> CTRL_CLOSE_EVENT = 2, /// <summary> /// CTRL_LOGOFF_EVENT /// </summary> CTRL_LOGOFF_EVENT = 5, /// <summary> /// CTRL_SHUTDOWN_EVENT /// </summary> CTRL_SHUTDOWN_EVENT = 6 } |
■ GetConsoleWindow API 함수를 선언하는 방법을 보여준다. ▶ 예제 코드 (C#)
|
using System; using System.Runtime.InteropServices; #region 콘솔 윈도우 구하기 - GetConsoleWindow() /// <summary> /// 콘솔 윈도우 구하기 /// </summary> /// <returns>콘솔 윈도우 핸들</returns> [DllImport("kernel32", CallingConvention = CallingConvention.StdCall, SetLastError = true)] private static extern IntPtr GetConsoleWindow(); #endregion |