223 lines
7.9 KiB
C#
223 lines
7.9 KiB
C#
using System;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.Runtime.InteropServices;
|
|
using System.Runtime.Versioning;
|
|
using System.Security;
|
|
|
|
namespace HandyControl.Tools.Interop
|
|
{
|
|
public delegate IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
|
|
|
|
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
|
[SuppressMessage("ReSharper", "IdentifierTypo")]
|
|
internal class NativeMethods
|
|
{
|
|
public const int
|
|
WS_CHILD = 0x40000000,
|
|
BITSPIXEL = 12,
|
|
PLANES = 14,
|
|
BI_RGB = 0,
|
|
DIB_RGB_COLORS = 0,
|
|
NIF_MESSAGE = 0x00000001,
|
|
NIF_ICON = 0x00000002,
|
|
NIF_TIP = 0x00000004,
|
|
NIF_INFO = 0x00000010,
|
|
NIN_BALLOONSHOW = WM_USER + 2,
|
|
NIN_BALLOONHIDE = WM_USER + 3,
|
|
NIN_BALLOONTIMEOUT = WM_USER + 4,
|
|
NIM_ADD = 0x00000000,
|
|
NIM_MODIFY = 0x00000001,
|
|
NIM_DELETE = 0x00000002,
|
|
NIIF_NONE = 0x00000000,
|
|
NIIF_INFO = 0x00000001,
|
|
NIIF_WARNING = 0x00000002,
|
|
NIIF_ERROR = 0x00000003,
|
|
WM_KEYDOWN = 0x0100,
|
|
WM_KEYUP = 0x0101,
|
|
WM_SYSKEYDOWN = 0x0104,
|
|
WM_SYSKEYUP = 0x0105,
|
|
WM_MOUSEMOVE = 0x0200,
|
|
WM_LBUTTONDOWN = 0x0201,
|
|
WM_LBUTTONUP = 0x0202,
|
|
WM_LBUTTONDBLCLK = 0x0203,
|
|
WM_RBUTTONDOWN = 0x0204,
|
|
WM_RBUTTONUP = 0x0205,
|
|
WM_RBUTTONDBLCLK = 0x0206,
|
|
WM_MBUTTONDOWN = 0x0207,
|
|
WM_MBUTTONUP = 0x0208,
|
|
WM_MBUTTONDBLCLK = 0x0209,
|
|
WM_USER = 0x0400,
|
|
TB_GETBUTTON = WM_USER + 23,
|
|
TB_BUTTONCOUNT = WM_USER + 24,
|
|
TB_GETITEMRECT = WM_USER + 29,
|
|
STANDARD_RIGHTS_REQUIRED = 0x000F0000,
|
|
SYNCHRONIZE = 0x00100000,
|
|
PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF,
|
|
MEM_COMMIT = 0x1000,
|
|
MEM_RELEASE = 0x8000,
|
|
PAGE_READWRITE = 0x04,
|
|
TBSTATE_HIDDEN = 0x08,
|
|
VERTRES = 10,
|
|
HORZRES = 8,
|
|
DESKTOPVERTRES = 117,
|
|
DESKTOPHORZRES = 118,
|
|
LOGPIXELSX = 88,
|
|
LOGPIXELSY = 90,
|
|
CXFRAME = 32,
|
|
CXSIZEFRAME = CXFRAME;
|
|
|
|
[Flags]
|
|
public enum ProcessAccess
|
|
{
|
|
AllAccess = CreateThread | DuplicateHandle | QueryInformation | SetInformation | Terminate | VMOperation | VMRead | VMWrite | Synchronize,
|
|
CreateThread = 0x2,
|
|
DuplicateHandle = 0x40,
|
|
QueryInformation = 0x400,
|
|
SetInformation = 0x200,
|
|
Terminate = 0x1,
|
|
VMOperation = 0x8,
|
|
VMRead = 0x10,
|
|
VMWrite = 0x20,
|
|
Synchronize = 0x100000
|
|
}
|
|
|
|
[Serializable, StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
|
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)
|
|
{
|
|
Left = left;
|
|
Top = top;
|
|
Right = right;
|
|
Bottom = bottom;
|
|
}
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
|
public struct TBBUTTON
|
|
{
|
|
public int iBitmap;
|
|
public int idCommand;
|
|
public IntPtr fsStateStylePadding;
|
|
public IntPtr dwData;
|
|
public IntPtr iString;
|
|
}
|
|
|
|
[Flags]
|
|
public enum AllocationType
|
|
{
|
|
Commit = 0x1000,
|
|
Reserve = 0x2000,
|
|
Decommit = 0x4000,
|
|
Release = 0x8000,
|
|
Reset = 0x80000,
|
|
Physical = 0x400000,
|
|
TopDown = 0x100000,
|
|
WriteWatch = 0x200000,
|
|
LargePages = 0x20000000
|
|
}
|
|
|
|
[Flags]
|
|
public enum MemoryProtection
|
|
{
|
|
Execute = 0x10,
|
|
ExecuteRead = 0x20,
|
|
ExecuteReadWrite = 0x40,
|
|
ExecuteWriteCopy = 0x80,
|
|
NoAccess = 0x01,
|
|
ReadOnly = 0x02,
|
|
ReadWrite = 0x04,
|
|
WriteCopy = 0x08,
|
|
GuardModifierflag = 0x100,
|
|
NoCacheModifierflag = 0x200,
|
|
WriteCombineModifierflag = 0x400
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct TRAYDATA
|
|
{
|
|
public IntPtr hwnd;
|
|
public uint uID;
|
|
public uint uCallbackMessage;
|
|
public uint bReserved0;
|
|
public uint bReserved1;
|
|
public IntPtr hIcon;
|
|
}
|
|
|
|
[Flags]
|
|
public enum FreeType
|
|
{
|
|
Decommit = 0x4000,
|
|
Release = 0x8000,
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct POINT
|
|
{
|
|
public int X;
|
|
public int Y;
|
|
|
|
public POINT(int x, int y)
|
|
{
|
|
X = x;
|
|
Y = y;
|
|
}
|
|
}
|
|
|
|
[DllImport(ExternDll.User32, CharSet = CharSet.Auto)]
|
|
[ResourceExposure(ResourceScope.None)]
|
|
public static extern int RegisterWindowMessage(string msg);
|
|
|
|
[DllImport(ExternDll.User32, SetLastError = true, CharSet = CharSet.Auto)]
|
|
public static extern int MapWindowPoints(IntPtr hWndFrom, IntPtr hWndTo, ref RECT lpPoints, uint cPoints);
|
|
|
|
[DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
|
|
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out TBBUTTON lpBuffer, int dwSize, out int lpNumberOfBytesRead);
|
|
|
|
[DllImport(ExternDll.Kernel32, SetLastError = true)]
|
|
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out RECT lpBuffer, int dwSize, out int lpNumberOfBytesRead);
|
|
|
|
[DllImport(ExternDll.Kernel32, SetLastError = true)]
|
|
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, out TRAYDATA lpBuffer, int dwSize, out int lpNumberOfBytesRead);
|
|
|
|
[DllImport(ExternDll.User32, CharSet = CharSet.Auto)]
|
|
public static extern uint SendMessage(IntPtr hWnd, uint Msg, uint wParam, IntPtr lParam);
|
|
|
|
[DllImport(ExternDll.User32, SetLastError = true, CharSet = CharSet.Auto)]
|
|
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
|
|
|
|
[DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
|
|
public static extern IntPtr OpenProcess(ProcessAccess dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, uint dwProcessId);
|
|
|
|
[DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
|
|
public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, AllocationType flAllocationType, MemoryProtection flProtect);
|
|
|
|
[DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
|
|
public static extern int CloseHandle(IntPtr hObject);
|
|
|
|
[DllImport(ExternDll.Kernel32, SetLastError = true, CharSet = CharSet.Auto)]
|
|
public static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, int dwSize, FreeType dwFreeType);
|
|
|
|
[DllImport(ExternDll.User32, SetLastError = true)]
|
|
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
|
|
|
|
[DllImport(ExternDll.User32, SetLastError = true)]
|
|
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
|
|
|
|
[DllImport(ExternDll.User32)]
|
|
public static extern int GetWindowRect(IntPtr hwnd, out RECT lpRect);
|
|
|
|
[DllImport(ExternDll.User32, CharSet = CharSet.Auto)]
|
|
public static extern bool GetCursorPos(out POINT pt);
|
|
|
|
[SecurityCritical]
|
|
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
|
[DllImport(ExternDll.User32)]
|
|
public static extern int GetSystemMetrics(SM nIndex);
|
|
}
|
|
} |