using System.Drawing; using System.Runtime.InteropServices; using System.Text; using static HandyControl.Tools.Interop.InteropValues; namespace MpvNet.Windows.Native; public static class WinApi { [DllImport("kernel32.dll")] public static extern bool AttachConsole(int dwProcessId); [DllImport("kernel32.dll")] public static extern bool FreeConsole(); [DllImport("kernel32.dll")] public static extern IntPtr LoadLibrary(string path); [DllImport("user32.dll")] public static extern uint ActivateKeyboardLayout(IntPtr hkl, uint flags); [DllImport("user32.dll")] public static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect); [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr FindWindowEx( IntPtr parentHandle, IntPtr childAfter, string lclassName, string? windowTitle); [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, ref CopyDataStruct lParam); [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern int RegisterWindowMessage(string id); [DllImport("user32.dll")] public static extern bool AllowSetForegroundWindow(int dwProcessId); [DllImport("user32.dll")] public static extern void ReleaseCapture(); [DllImport("user32.dll")] public static extern int GetDpiForWindow(IntPtr hwnd); [DllImport("user32.dll")] public static extern bool AdjustWindowRect(ref RECT lpRect, uint dwStyle, bool bMenu); [DllImport("user32.dll")] public static extern bool AdjustWindowRectExForDpi( ref RECT lpRect, uint dwStyle, bool bMenu, uint dwExStyle, uint dpi); [DllImport("user32.dll")] public static extern bool SetWindowPos( IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags); [DllImport("user32.dll")] public static extern IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex); [DllImport("gdi32.dll")] public static extern int GetDeviceCaps(IntPtr hdc, int nIndex); [DllImport("shlwapi", CharSet = CharSet.Auto)] public static extern uint AssocQueryString( uint flags, uint str, string? pszAssoc, string? pszExtra, [Out] StringBuilder? pszOut, ref uint pcchOut); [DllImport("dwmapi.dll")] public static extern int DwmGetWindowAttribute( IntPtr hwnd, uint dwAttribute, out RECT pvAttribute, uint cbAttribute); [StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; public RECT(Rectangle r) { Left = r.Left; Top = r.Top; Right = r.Right; Bottom = r.Bottom; } public RECT(int left, int top, int right, int bottom) { Left = left; Top = top; Right = right; Bottom = bottom; } public Rectangle ToRectangle() => Rectangle.FromLTRB(Left, Top, Right, Bottom); public Size Size => new Size(Right - Left, Bottom - Top); public int Width => Right - Left; public int Height => Bottom - Top; public static RECT FromRectangle(Rectangle rect) { return new RECT(rect.X, rect.Y, rect.X + rect.Width, rect.Y + rect.Height); } public override string ToString() { return "{Left=" + Left + ",Top=" + Top + ",Right=" + Right + ",Bottom=" + Bottom + "}"; } } [StructLayout(LayoutKind.Sequential)] public struct NCCALCSIZE_PARAMS { public NCCALCSIZE_PARAMS(RECT[] r, WINDOWPOS wp) { rgrc = r; lppos = wp; } [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public RECT[] rgrc; public WINDOWPOS lppos; } [StructLayout(LayoutKind.Sequential)] public struct CopyDataStruct { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPTStr)] public string lpData; } }