63 lines
2.0 KiB
C#
63 lines
2.0 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using Windows.Win32;
|
|
using Windows.Win32.Foundation;
|
|
using Windows.Win32.UI.WindowsAndMessaging;
|
|
|
|
namespace Toolkit.Windows;
|
|
|
|
public class WindowHelper
|
|
{
|
|
public static IntPtr FindWindow(string name) =>
|
|
PInvoke.FindWindow(name, null);
|
|
|
|
public static IntPtr FindWindow(string name, IntPtr handle) =>
|
|
PInvoke.FindWindowEx(new HWND(handle), new HWND(), name, null);
|
|
|
|
public static uint GetDpi(IntPtr handle) =>
|
|
PInvoke.GetDpiForWindow((HWND)handle);
|
|
|
|
public static IntPtr GetWindowHandle(string name) =>
|
|
PInvoke.FindWindow(name, null);
|
|
|
|
public static bool HideWindow(IntPtr hWnd) =>
|
|
PInvoke.ShowWindow(new HWND(hWnd), SHOW_WINDOW_CMD.SW_HIDE);
|
|
|
|
public static void MoveAndResizeWindow(HWND handle, int x, int y, int width, int height) =>
|
|
PInvoke.SetWindowPos(handle, new HWND(), x, y, width, height, 0);
|
|
|
|
public static bool SetForegroundWindow(HWND handle)
|
|
{
|
|
if (TryGetWindowBoundsUnsafe(handle, out RECT bounds))
|
|
{
|
|
return PInvoke.SetWindowPos(handle, new HWND(), bounds.left, bounds.top, bounds.right -
|
|
bounds.left, bounds.bottom - bounds.top, SET_WINDOW_POS_FLAGS.SWP_SHOWWINDOW | SET_WINDOW_POS_FLAGS.SWP_NOACTIVATE) == 1;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static bool ShowWindow(IntPtr hWnd) =>
|
|
PInvoke.ShowWindow(new HWND(hWnd), SHOW_WINDOW_CMD.SW_SHOW);
|
|
|
|
public static bool TryGetWindowBounds(IntPtr handle,
|
|
[MaybeNullWhen(false)] out Rect rect)
|
|
{
|
|
if (TryGetWindowBoundsUnsafe(handle, out RECT unsafeRect))
|
|
{
|
|
rect = new Rect(unsafeRect.left, unsafeRect.top, unsafeRect.right - unsafeRect.left, unsafeRect.bottom - unsafeRect.top);
|
|
return true;
|
|
}
|
|
|
|
rect = null;
|
|
return false;
|
|
}
|
|
|
|
private static unsafe bool TryGetWindowBoundsUnsafe(IntPtr handle, out RECT rect)
|
|
{
|
|
fixed (RECT* lpRectLocal = &rect)
|
|
{
|
|
return PInvoke.GetWindowRect(new HWND(handle), lpRectLocal);
|
|
}
|
|
}
|
|
}
|