634 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			634 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | 
 | ||
|  | 
 | ||
|  | using System; | ||
|  | using System.Runtime.InteropServices; | ||
|  | using System.Drawing; | ||
|  | 
 | ||
|  | namespace Urovo | ||
|  | { | ||
|  |     public class Win32 | ||
|  |     { | ||
|  |         #region window | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr FindWindow([MarshalAs(UnmanagedType.LPWStr)]string lpClassName, [MarshalAs(UnmanagedType.LPWStr)]string lpWindowName); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); | ||
|  | 
 | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// A callback to a Win32 window procedure (wndproc) | ||
|  |         /// </summary> | ||
|  |         /// <param name="hwnd">The handle of the window receiving a message</param> | ||
|  |         /// <param name="msg">The message</param> | ||
|  |         /// <param name="wParam">The message's parameters (part 1)</param> | ||
|  |         /// <param name="lParam">The message's parameters (part 2)</param> | ||
|  |         /// <returns>A integer as described for the given message in MSDN</returns> | ||
|  |         public delegate int WndProc(IntPtr hwnd, uint msg, uint wParam, int lParam); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public extern static int DefWindowProc(IntPtr hwnd, uint msg, uint wParam, int lParam); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public extern static IntPtr SetWindowLong(IntPtr hwnd, int nIndex, IntPtr dwNewLong); | ||
|  | 
 | ||
|  |         public const int GWL_WNDPROC = -4; | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public extern static int CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hwnd, uint msg, uint wParam, int lParam); | ||
|  | 
 | ||
|  | 
 | ||
|  |         public const uint WM_NOTIFY = 0x4E; | ||
|  | 
 | ||
|  |         public const uint NM_CLICK = 0xFFFFFFFE; | ||
|  |         public const uint NM_DBLCLK = 0xFFFFFFFD; | ||
|  |         public const uint NM_RCLICK = 0xFFFFFFFB; | ||
|  |         public const uint NM_RDBLCLK = 0xFFFFFFFA; | ||
|  | 
 | ||
|  | 
 | ||
|  |         public const uint TV_FIRST = 0x1100; | ||
|  |         public const uint TVM_HITTEST = TV_FIRST + 17; | ||
|  | 
 | ||
|  |         public const uint TVHT_NOWHERE = 0x0001; | ||
|  |         public const uint TVHT_ONITEMICON = 0x0002; | ||
|  |         public const uint TVHT_ONITEMLABEL = 0x0004; | ||
|  |         public const uint TVHT_ONITEM = (TVHT_ONITEMICON | TVHT_ONITEMLABEL | TVHT_ONITEMSTATEICON); | ||
|  |         public const uint TVHT_ONITEMINDENT = 0x0008; | ||
|  |         public const uint TVHT_ONITEMBUTTON = 0x0010; | ||
|  |         public const uint TVHT_ONITEMRIGHT = 0x0020; | ||
|  |         public const uint TVHT_ONITEMSTATEICON = 0x0040; | ||
|  |         public const uint TVHT_ABOVE = 0x0100; | ||
|  |         public const uint TVHT_BELOW = 0x0200; | ||
|  |         public const uint TVHT_TORIGHT = 0x0400; | ||
|  |         public const uint TVHT_TOLEFT = 0x0800; | ||
|  | 
 | ||
|  |         [System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)] | ||
|  |         public class NMHDR | ||
|  |         { | ||
|  |             public IntPtr hwndFrom; | ||
|  |             public uint idFrom; | ||
|  |             public uint code; | ||
|  |         } | ||
|  | 
 | ||
|  |         public struct TVHITTESTINFO | ||
|  |         { | ||
|  |             public POINT pt; | ||
|  |             public uint flags; | ||
|  |             public IntPtr hItem; | ||
|  |         } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Helper function to convert a Windows lParam into a Point | ||
|  |         /// </summary> | ||
|  |         /// <param name="lParam">The parameter to convert</param> | ||
|  |         /// <returns>A Point where X is the low 16 bits and Y is the | ||
|  |         /// high 16 bits of the value passed in</returns> | ||
|  |         public static Point LParamToPoint(int lParam) | ||
|  |         { | ||
|  |             uint ulParam = (uint)lParam; | ||
|  |             return new Point( | ||
|  |                 (int)(ulParam & 0x0000ffff), | ||
|  |                 (int)((ulParam & 0xffff0000) >> 16)); | ||
|  |         } | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public extern static uint GetMessagePos(); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public extern static int SendMessage(IntPtr hwnd, uint msg, uint wParam, ref TVHITTESTINFO lParam); | ||
|  | 
 | ||
|  | 
 | ||
|  |         public const uint LVM_FIRST = 0x1000;     // ListView messages | ||
|  |         public const uint LVM_HITTEST = (LVM_FIRST + 18); | ||
|  |         public const uint LVM_SUBITEMHITTEST = (LVM_FIRST + 57); | ||
|  | 
 | ||
|  | 
 | ||
|  |         public const uint LVHT_NOWHERE = 0x00000001; | ||
|  |         public const uint LVHT_ONITEMICON = 0x00000002; | ||
|  |         public const uint LVHT_ONITEMLABEL = 0x00000004; | ||
|  |         public const uint LVHT_ONITEMSTATEICON = 0x00000008; | ||
|  |         public const uint LVHT_ONITEM = (LVHT_ONITEMICON | LVHT_ONITEMLABEL | LVHT_ONITEMSTATEICON); | ||
|  | 
 | ||
|  |         public const uint LVHT_ABOVE = 0x00000008; | ||
|  |         public const uint LVHT_BELOW = 0x00000010; | ||
|  |         public const uint LVHT_TORIGHT = 0x00000020; | ||
|  |         public const uint LVHT_TOLEFT = 0x00000040; | ||
|  | 
 | ||
|  |         public struct LVHITTESTINFO | ||
|  |         { | ||
|  |             public POINT pt; | ||
|  |             public uint flags; | ||
|  |             public int iItem; | ||
|  |             public int iSubItem; | ||
|  |         } | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public extern static int SendMessage(IntPtr hwnd, uint msg, uint wParam, ref LVHITTESTINFO lParam); | ||
|  |         #endregion | ||
|  | 
 | ||
|  |         #region keyboard | ||
|  |         public const uint WM_KEYFIRST = 0x0100; | ||
|  |         public const uint WM_KEYDOWN = 0x0100; | ||
|  |         public const uint WM_KEYUP = 0x0101; | ||
|  |         public const uint WM_KEYLAST = 0x0108; | ||
|  | 
 | ||
|  |         public const int WM_HOTKEY = 0x0312; | ||
|  | 
 | ||
|  |         public const uint MOD_ALT = 1; | ||
|  |         public const uint MOD_CONTROL = 2; | ||
|  |         public const uint MOD_KEYUP = 0x1000; | ||
|  |         public const uint MOD_SHIFT = 4; | ||
|  |         public const uint MOD_WIN = 8; | ||
|  | 
 | ||
|  |         public const uint VK_NUMPAD0 = 0x60; | ||
|  |         public const uint VK_NUMPAD1 = 0x61; | ||
|  |         public const uint VK_NUMPAD2 = 0x62; | ||
|  |         public const uint VK_NUMPAD3 = 0x63; | ||
|  |         public const uint VK_NUMPAD4 = 0x64; | ||
|  |         public const uint VK_NUMPAD5 = 0x65; | ||
|  |         public const uint VK_NUMPAD6 = 0x66; | ||
|  |         public const uint VK_NUMPAD7 = 0x67; | ||
|  |         public const uint VK_NUMPAD8 = 0x68; | ||
|  |         public const uint VK_NUMPAD9 = 0x69; | ||
|  | 
 | ||
|  |         public const uint VK_F1 = 0x70; | ||
|  |         public const uint VK_F2 = 0x71; | ||
|  |         public const uint VK_F3 = 0x72; | ||
|  |         public const uint VK_F4 = 0x73; | ||
|  |         public const uint VK_F5 = 0x74; | ||
|  |         public const uint VK_F6 = 0x75; | ||
|  |         public const uint VK_F7 = 0x76; | ||
|  |         public const uint VK_F8 = 0x77; | ||
|  |         public const uint VK_F9 = 0x78; | ||
|  | 
 | ||
|  |         public const uint VK_F23 = 0x86; | ||
|  |         public const uint VK_F24 = 0x87; | ||
|  | 
 | ||
|  |         public const uint VK_ESCAPE = 0x1B; | ||
|  |         public const uint VK_RETURN = 0x0D; | ||
|  |         public const uint VK_CAPITAL = 0x14; | ||
|  |         public const uint VK_NUMBER = 0x0B; | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool UnregisterHotKey(IntPtr hWnd, int id); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern short GetKeyState(int nVirtKey); | ||
|  | 
 | ||
|  |         #endregion | ||
|  | 
 | ||
|  |         #region event | ||
|  | 
 | ||
|  |         public const uint WAIT_TIMEOUT = 0x102; | ||
|  |         public const uint WAIT_FAILED = 0xffffffffu; | ||
|  |         public const uint INFINITE = 0xffffffffu; | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern uint WaitForSingleObject(IntPtr hHandle, uint dwMilliseconds); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern uint WaitForMultipleObjects(uint nCount, IntPtr[] lpHandles, [MarshalAs(UnmanagedType.Bool)]bool fWaitAll, uint dwMilliseconds); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr CreateEvent(IntPtr lpEventAttributes, [MarshalAs(UnmanagedType.Bool)]bool bManualReset, [MarshalAs(UnmanagedType.Bool)]bool bInitialState, [MarshalAs(UnmanagedType.LPWStr)]string lpName); | ||
|  | 
 | ||
|  | 
 | ||
|  |         public const uint EVENT_PULSE = 1; | ||
|  |         public const uint EVENT_RESET = 2; | ||
|  |         public const uint EVENT_SET = 3; | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool EventModify(IntPtr hEvent, uint func); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool CloseHandle(IntPtr hObject); | ||
|  | 
 | ||
|  | 
 | ||
|  |         [StructLayout(LayoutKind.Sequential)] | ||
|  |         public class MSGQUEUEOPTIONS | ||
|  |         { | ||
|  |             public uint dwSize; | ||
|  |             public uint dwFlags; | ||
|  |             public uint dwMaxMessages; | ||
|  |             public uint cbMaxMessage; | ||
|  |             public bool bReadAccess; | ||
|  |         } | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr CreateMsgQueue([MarshalAs(UnmanagedType.LPWStr)]string lpszName, MSGQUEUEOPTIONS lpOptions); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool CloseMsgQueue(IntPtr hMsgQ); | ||
|  | 
 | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool ReadMsgQueue(IntPtr hMsgQ, [MarshalAs(UnmanagedType.AsAny)]out object lpBuffer, uint cbBufferSize, out uint lpNumberOfBytesRead, uint dwTimeout, out uint pdwFlags); | ||
|  | 
 | ||
|  |         [StructLayout(LayoutKind.Sequential)] | ||
|  |         public struct POWER_BROADCAST_POWER_INFO | ||
|  |         { | ||
|  |             public uint dwNumLevels; | ||
|  |             public uint dwBatteryLifeTime; | ||
|  |             public uint dwBatteryFullLifeTime; | ||
|  |             public uint dwBackupBatteryLifeTime; | ||
|  |             public uint dwBackupBatteryFullLifeTime; | ||
|  |             public byte bACLineStatus; | ||
|  |             public byte bBatteryFlag; | ||
|  |             public byte bBatteryLifePercent; | ||
|  |             public byte bBackupBatteryFlag; | ||
|  |             public byte bBackupBatteryLifePercent; | ||
|  |         } | ||
|  | 
 | ||
|  |         [StructLayout(LayoutKind.Sequential)] | ||
|  |         public struct POWER_BROADCAST | ||
|  |         { | ||
|  |             public uint Message;    // one of PBT_Xxx | ||
|  |             public uint Flags;      // one of POWER_STATE_Xxx | ||
|  |             public uint Length;     // byte count of data starting at SystemPowerStateName | ||
|  |             public POWER_BROADCAST_POWER_INFO PI; | ||
|  |         } | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool ReadMsgQueue(IntPtr hMsgQ, out POWER_BROADCAST BroadCast, uint cbBufferSize, out uint lpNumberOfBytesRead, uint dwTimeout, out uint pdwFlags); | ||
|  | 
 | ||
|  |         #endregion | ||
|  | 
 | ||
|  |         #region hook | ||
|  |         public delegate int HOOKPROC(int code, uint wParam, KBDLLHOOKSTRUCT lParam); | ||
|  | 
 | ||
|  | 
 | ||
|  |         public const int WH_JOURNALRECORD = 0; | ||
|  |         public const int WH_JOURNALPLAYBACK = 1; | ||
|  |         public const int WH_KEYBOARD_LL = 20; | ||
|  | 
 | ||
|  |         public const int HC_ACTION = 0; | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll", EntryPoint = "SetWindowsHookExW")] | ||
|  |         public static extern IntPtr SetWindowsHookEx(int idHook, [MarshalAs(UnmanagedType.FunctionPtr)]HOOKPROC lpfn, IntPtr hmod, uint dwThreadId); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool UnhookWindowsHookEx(IntPtr hhk); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern int CallNextHookEx(IntPtr hhk, int nCode, uint wParam, KBDLLHOOKSTRUCT lParam); | ||
|  | 
 | ||
|  |         public const uint SND_ALIAS = 0x00010000;   // name is a WIN.INI [sounds] entry | ||
|  |         public const uint SND_FILENAME = 0x00020000;   // name is a file name | ||
|  | 
 | ||
|  |         public const uint SND_SYNC = 0x00000000;   // play synchronously (default) | ||
|  |         public const uint SND_ASYNC = 0x00000001;   // play asynchronously | ||
|  |         public const uint SND_NODEFAULT = 0x00000002;   // silence not default, if sound not found | ||
|  |         public const uint SND_MEMORY = 0x00000004;   // lpszSoundName points to a memory file | ||
|  |         public const uint SND_LOOP = 0x00000008;   // loop the sound until next sndPlaySound | ||
|  |         public const uint SND_NOSTOP = 0x00000010;   // don't stop any currently playing sound | ||
|  |         #endregion | ||
|  | 
 | ||
|  |         #region powermgr | ||
|  |         public const uint PBT_TRANSITION = 0x00000001;  // broadcast specifying system power state transition | ||
|  |         public const uint PBT_RESUME = 0x00000002;  // broadcast notifying a resume, specifies previous state | ||
|  |         public const uint PBT_POWERSTATUSCHANGE = 0x00000004;  // power supply switched to/from AC/DC | ||
|  |         public const uint PBT_POWERINFOCHANGE = 0x00000008;  // some system power status field has changed | ||
|  | 
 | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr RequestPowerNotifications(IntPtr hMsgQ, uint Flags); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool StopPowerNotifications(IntPtr hMsgQ); | ||
|  | 
 | ||
|  |         [StructLayout(LayoutKind.Sequential)] | ||
|  |         public class SYSTEM_POWER_STATUS_EX2 | ||
|  |         { | ||
|  |             public byte ACLineStatus; | ||
|  |             public byte BatteryFlag; | ||
|  |             public byte BatteryLifePercent; | ||
|  |             public byte Reserved1; | ||
|  |             public uint BatteryLifeTime; | ||
|  |             public uint BatteryFullLifeTime; | ||
|  |             public byte Reserved2; | ||
|  |             public byte BackupBatteryFlag; | ||
|  |             public byte BackupBatteryLifePercent; | ||
|  |             public byte Reserved3; | ||
|  |             public uint BackupBatteryLifeTime; | ||
|  |             public uint BackupBatteryFullLifeTime; | ||
|  |             public uint BatteryVoltage; | ||
|  |             public uint BatteryCurrent; | ||
|  |             public uint BatteryAverageCurrent; | ||
|  |             public uint BatteryAverageInterval; | ||
|  |             public uint BatterymAHourConsumed; | ||
|  |             public uint BatteryTemperature; | ||
|  |             public uint BackupBatteryVoltage; | ||
|  |             public byte BatteryChemistry; | ||
|  |         } | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern uint GetSystemPowerStatusEx2(SYSTEM_POWER_STATUS_EX2 pSystemPowerStatusEx2, uint dwLen, [MarshalAs(UnmanagedType.Bool)]bool fUpdate); | ||
|  | 
 | ||
|  |         public const uint POWER_STATE_ON = 0x00010000u;        // on state | ||
|  |         public const uint POWER_STATE_OFF = 0x00020000u;        // no power, full off | ||
|  |         public const uint POWER_STATE_CRITICAL = 0x00040000u;        // critical off | ||
|  |         public const uint POWER_STATE_BOOT = 0x00080000u;        // boot state | ||
|  |         public const uint POWER_STATE_IDLE = 0x00100000u;        // idle state | ||
|  |         public const uint POWER_STATE_SUSPEND = 0x00200000u;        // suspend state | ||
|  |         public const uint POWER_STATE_RESET = 0x00800000u;        // reset state | ||
|  | 
 | ||
|  |         public const uint POWER_FORCE = 0x00001000u; | ||
|  | 
 | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern uint SetSystemPowerState([MarshalAs(UnmanagedType.LPWStr)]string psState, uint StateFlags, uint Options); | ||
|  | 
 | ||
|  | 
 | ||
|  |         #endregion | ||
|  | 
 | ||
|  |         #region system | ||
|  | 
 | ||
|  |         // defines | ||
|  |         public const int IDC_WAIT = 32514; | ||
|  | 
 | ||
|  |         // functions | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr LoadCursor(IntPtr hInstance, int lpCursorName); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr SetCursor(IntPtr hCursor); | ||
|  | 
 | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, int pvParam, uint fWinIni); | ||
|  | 
 | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool sndPlaySound(byte[] lpszSoundName, uint fuSound); | ||
|  | 
 | ||
|  | 
 | ||
|  |         [StructLayout(LayoutKind.Sequential)] | ||
|  |         public class SYSTEMTIME | ||
|  |         { | ||
|  |             public ushort wYear; | ||
|  |             public ushort wMonth; | ||
|  |             public ushort wDayOfWeek; | ||
|  |             public ushort wDay; | ||
|  |             public ushort wHour; | ||
|  |             public ushort wMinute; | ||
|  |             public ushort wSecond; | ||
|  |             public ushort wMilliseconds; | ||
|  | 
 | ||
|  |             public SYSTEMTIME(DateTime datetime) | ||
|  |             { | ||
|  |                 this.wYear = (ushort)datetime.Year; | ||
|  |                 this.wMonth = (ushort)datetime.Month; | ||
|  |                 this.wDay = (ushort)datetime.Day; | ||
|  |                 this.wHour = (ushort)datetime.Hour; | ||
|  |                 this.wMinute = (ushort)datetime.Minute; | ||
|  |                 this.wSecond = (ushort)datetime.Second; | ||
|  |                 this.wMilliseconds = (ushort)datetime.Millisecond; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool SetLocalTime(SYSTEMTIME lpSystemTime); | ||
|  |         #endregion | ||
|  | 
 | ||
|  |         #region gdi | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr GetDC(IntPtr hWnd); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr CreateCompatibleDC(IntPtr hDC); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool DeleteDC(IntPtr hDC); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr CreateCompatibleBitmap(IntPtr hDC, int nWidth, int nHeight); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hgdiobj); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool DeleteObject(IntPtr hgdiobj); | ||
|  | 
 | ||
|  | 
 | ||
|  |         public const uint SRCCOPY = 0x00CC0020u; /* dest = source                   */ | ||
|  |         public const uint SRCPAINT = 0x00EE0086u; /* dest = source OR dest           */ | ||
|  |         public const uint SRCAND = 0x008800C6u; /* dest = source AND dest          */ | ||
|  |         public const uint SRCINVERT = 0x00660046u; /* dest = source XOR dest          */ | ||
|  |         public const uint SRCERASE = 0x00440328u; /* dest = source AND (NOT dest )   */ | ||
|  |         public const uint NOTSRCCOPY = 0x00330008u; /* dest = (NOT source)             */ | ||
|  |         public const uint NOTSRCERASE = 0x001100A6u; /* dest = (NOT src) AND (NOT dest) */ | ||
|  |         public const uint MERGECOPY = 0x00C000CAu; /* dest = (source AND pattern)     */ | ||
|  |         public const uint MERGEPAINT = 0x00BB0226u; /* dest = (NOT source) OR dest     */ | ||
|  |         public const uint PATCOPY = 0x00F00021u; /* dest = pattern                  */ | ||
|  |         public const uint PATPAINT = 0x00FB0A09u; /* dest = DPSnoo                   */ | ||
|  |         public const uint PATINVERT = 0x005A0049u; /* dest = pattern XOR dest         */ | ||
|  |         public const uint DSTINVERT = 0x00550009u; /* dest = (NOT dest)               */ | ||
|  |         public const uint BLACKNESS = 0x00000042u; /* dest = BLACK                    */ | ||
|  |         public const uint WHITENESS = 0x00FF0062u; /* dest = WHITE                    */ | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop); | ||
|  | 
 | ||
|  | 
 | ||
|  |         public struct TRIVERTEX | ||
|  |         { | ||
|  |             public int x; | ||
|  |             public int y; | ||
|  |             public ushort Red; | ||
|  |             public ushort Green; | ||
|  |             public ushort Blue; | ||
|  |             public ushort Alpha; | ||
|  | 
 | ||
|  |             public TRIVERTEX(int x, int y, ushort red, ushort green, ushort blue, ushort alpha) | ||
|  |             { | ||
|  |                 this.x = x; | ||
|  |                 this.y = y; | ||
|  |                 this.Red = (ushort)(red << 8); | ||
|  |                 this.Green = (ushort)(green << 8); | ||
|  |                 this.Blue = (ushort)(blue << 8); | ||
|  |                 this.Alpha = (ushort)(alpha << 8); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public struct GRADIENT_RECT | ||
|  |         { | ||
|  |             public uint UpperLeft; | ||
|  |             public uint LowerRight; | ||
|  | 
 | ||
|  |             public GRADIENT_RECT(uint ul, uint lr) | ||
|  |             { | ||
|  |                 this.UpperLeft = ul; | ||
|  |                 this.LowerRight = lr; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public const int GRADIENT_FILL_RECT_H = 0x00000000; | ||
|  |         public const int GRADIENT_FILL_RECT_V = 0x00000001; | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public extern static bool GradientFill(IntPtr hdc, TRIVERTEX[] pVertex, uint dwNumVertex, GRADIENT_RECT[] pMesh, uint dwNumMesh, uint dwMode); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||
|  |         public static extern bool RoundRect(IntPtr hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidth, int nHeight); | ||
|  | 
 | ||
|  | 
 | ||
|  |         public const int WHITE_BRUSH = 0; | ||
|  |         public const int LTGRAY_BRUSH = 1; | ||
|  |         public const int GRAY_BRUSH = 2; | ||
|  |         public const int DKGRAY_BRUSH = 3; | ||
|  |         public const int BLACK_BRUSH = 4; | ||
|  |         public const int NULL_BRUSH = 5; | ||
|  |         public const int HOLLOW_BRUSH = 5; | ||
|  |         public const int WHITE_PEN = 6; | ||
|  |         public const int BLACK_PEN = 7; | ||
|  |         public const int NULL_PEN = 8; | ||
|  |         public const int SYSTEM_FONT = 13; | ||
|  |         public const int DEFAULT_PALETTE = 15; | ||
|  |         public const int BORDERX_PEN = 32; | ||
|  |         public const int BORDERY_PEN = 33; | ||
|  | 
 | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr GetStockObject(int fnObject); | ||
|  | 
 | ||
|  |         public const int PS_SOLID = 0; | ||
|  |         public const int PS_DASH = 1; | ||
|  |         public const int PS_NULL = 5; | ||
|  | 
 | ||
|  |         public static uint RGB(byte r, byte g, byte b) | ||
|  |         { | ||
|  |             return (uint)r | (uint)((uint)g << 8) | (uint)((uint)b << 16); | ||
|  |         } | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr CreatePen(int fnPenStyle, int nWidth, uint crColor); | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr CreateSolidBrush(uint crColor); | ||
|  | 
 | ||
|  | 
 | ||
|  |         public struct RECT | ||
|  |         { | ||
|  |             public int left; | ||
|  |             public int top; | ||
|  |             public int right; | ||
|  |             public int bottom; | ||
|  | 
 | ||
|  |             public RECT(int left, int top, int right, int bottom) | ||
|  |             { | ||
|  |                 this.left = left; | ||
|  |                 this.top = top; | ||
|  |                 this.right = right; | ||
|  |                 this.bottom = bottom; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         public struct POINT | ||
|  |         { | ||
|  |             public int X; | ||
|  |             public int Y; | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern int FillRect(IntPtr hDC, ref RECT lprc, IntPtr hbr); | ||
|  | 
 | ||
|  |         public const uint BI_RGB = 0; | ||
|  | 
 | ||
|  |         public const uint DIB_RGB_COLORS = 0; /* color table in RGBs */ | ||
|  |         public const uint DIB_PAL_COLORS = 1; /* color table in palette indices */ | ||
|  | 
 | ||
|  | 
 | ||
|  |         public struct BITMAPINFOHEADER | ||
|  |         { | ||
|  |             public uint biSize; | ||
|  |             public int biWidth; | ||
|  |             public int biHeight; | ||
|  |             public ushort biPlanes; | ||
|  |             public ushort biBitCount; | ||
|  |             public uint biCompression; | ||
|  |             public uint biSizeImage; | ||
|  |             public int biXPelsPerMeter; | ||
|  |             public int biYPelsPerMeter; | ||
|  |             public uint biClrUsed; | ||
|  |             public uint biClrImportant; | ||
|  |         } | ||
|  | 
 | ||
|  |         public struct RGBQUAD | ||
|  |         { | ||
|  |             public byte rgbBlue; | ||
|  |             public byte rgbGreen; | ||
|  |             public byte rgbRed; | ||
|  |             public byte rgbReserved; | ||
|  |         } | ||
|  | 
 | ||
|  |         public struct BITMAPINFO | ||
|  |         { | ||
|  |             public BITMAPINFOHEADER bmiHeader; | ||
|  |             [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] | ||
|  |             public RGBQUAD[] bmiColors; | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |         [DllImport("coredll.dll")] | ||
|  |         public static extern IntPtr CreateDIBSection(IntPtr hdc, ref BITMAPINFO pbmi, uint iUsage, out IntPtr ppvBits, IntPtr hSection, uint dwOffset); | ||
|  | 
 | ||
|  | 
 | ||
|  |         public struct BITMAPFILEHEADER | ||
|  |         { | ||
|  |             public ushort bfType; | ||
|  |             public uint bfSize; | ||
|  |             public ushort bfReserved1; | ||
|  |             public ushort bfReserved2; | ||
|  |             public uint bfOffBits; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static uint BYTESPERLINE(uint Width, uint BPP) | ||
|  |         { | ||
|  |             return (uint)((ushort)(((Width * BPP + 31) >> 5)) << 2); | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |         [StructLayout(LayoutKind.Sequential)] | ||
|  |         public class KBDLLHOOKSTRUCT | ||
|  |         { | ||
|  |             public uint vkCode;  // virtual key code  | ||
|  |             public uint scanCode;  // scan code  | ||
|  |             public uint flags;  // flags  | ||
|  |             public uint time;   // time stamp for this message  | ||
|  |             public uint dwExtraInfo; // extra info from the driver or keybd_event  | ||
|  | 
 | ||
|  |         } | ||
|  |         #endregion | ||
|  | 
 | ||
|  |     } | ||
|  | } |