139 lines
4.3 KiB
C#
139 lines
4.3 KiB
C#
|
|
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;
|
|
}
|
|
}
|