主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ
書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。
2019/09/24
久々の C# ネタ、かつ UWP ネタということで、今年春のアップデートでできるようになった事についてご紹介。
UWP でスクリーンショットや動画の撮影などに使える GraphicsCapture API で、
Win32 API でおなじみの hWnd
をソースとして使えるようになっていました。
ということで使い方をサクッと紹介。
といってもほぼほぼ公式サンプルそのままです。
前提条件として
が導入・使用されているものとします。
[ComImport]
[Guid("3628E81B-3CAC-4C60-B7F4-23CE0E0C3356")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IGraphicsCaptureItemInterop
{
IntPtr CreateForWindow([In] IntPtr hWnd, ref Guid iid);
IntPtr CreateForMonitor([In] IntPtr hMonitor, ref Guid iid);
}
// hWnd から GraphicsCaptureItem を作ってあげる
public static class UwpInterop
{
public static GraphicsCaptureItem CreateItemForWindow(IntPtr hWnd)
{
var factory = WindowsRuntimeMarshal.GetActivationFactory(typeof(GraphicsCaptureItem));
var interop = (IGraphicsCaptureItemInterop) factory;
var iid = typeof(GraphicsCaptureItem).GetInterface("IGraphicsCaptureItem").GUID;
var pointer = interop.CreateForWindow(hWnd, ref iid);
var capture = Marshal.GetObjectForIUnknown(pointer) as GraphicsCaptureItem;
Marshal.Release(pointer);
return capture;
}
}
上で定義されている hMonitor
についても、同様の方法で GraphicsCaptureItem
を作ることが出来ます。
この後の使い方は、通常通り GraphicsCaptureItem
を使うのと同じ感じで使うことができます。
ということでではでは~