public void StartCapture(IntPtr hWnd, Device device, Factory factory) { var picker = new WindowPicker(); _hWnd = picker.PickCaptureTarget(hWnd); if (_hWnd == IntPtr.Zero) { return; } IsCapturing = true; }
public void StartCapture(IntPtr hWnd, Device device, Factory factory) { #region GraphicsCapturePicker version /* * var capturePicker = new GraphicsCapturePicker(); * * // ReSharper disable once PossibleInvalidCastException * // ReSharper disable once SuspiciousTypeConversion.Global * var initializer = (IInitializeWithWindow)(object)capturePicker; * initializer.Initialize(hWnd); * * _captureItem = capturePicker.PickSingleItemAsync().AsTask().Result; */ #endregion #region Window Handle version var capturePicker = new WindowPicker(); var captureHandle = capturePicker.PickCaptureTarget(hWnd); if (captureHandle == IntPtr.Zero) { return; } _captureItem = CreateItemForWindow(captureHandle); #endregion if (_captureItem == null) { return; } _captureItem.Closed += CaptureItemOnClosed; var hr = NativeMethods.CreateDirect3D11DeviceFromDXGIDevice(device.NativePointer, out var pUnknown); if (hr != 0) { StopCapture(); return; } var winrtDevice = (IDirect3DDevice)Marshal.GetObjectForIUnknown(pUnknown); Marshal.Release(pUnknown); _captureFramePool = Direct3D11CaptureFramePool.Create(winrtDevice, DirectXPixelFormat.B8G8R8A8UIntNormalized, 2, _captureItem.Size); _captureSession = _captureFramePool.CreateCaptureSession(_captureItem); _captureSession.StartCapture(); IsCapturing = true; }