naps2/NAPS2.Lib.WinForms/Platform/Windows/Win32Window.cs

30 lines
678 B
C#

using System.Windows.Forms;
namespace NAPS2.Platform.Windows;
/// <summary>
/// A trivial implementation of IWin32Window for use when serializing window handles cross-process.
/// </summary>
public class Win32Window : IWin32Window
{
public Win32Window(IntPtr hwnd)
{
Handle = hwnd;
}
public IntPtr Handle { get; }
}
public static class Win32WindowExtensions
{
public static IntPtr SafeHandle(this IWin32Window window)
{
if (window is Form form)
{
IntPtr hwnd = IntPtr.Zero;
form.Invoke(new Action(() => hwnd = window.Handle));
return hwnd;
}
return window.Handle;
}
}