.NET Window Capture Samples
NOTE: This is an experimental project. Please use it at your own risk.
Captures a window or desktop screen and renders it in WPF or DirectX.
Windows 10 (64-bit, April 2018 Update)
DirectX 11
.NET Framework 4.7.2
Visual Studio 2019
Project Name
Minimal Windows Version
Render To
Platform
Win32.BitBlt
Windows 95
DirectX
Win32
Win32.DesktopDuplication
Windows 8
DirectX
Win32
Win32.DwmSharedSurface
Windows 7
DirectX
Win32
Win32.DwmThumbnail
Windows 7
WPF
Win32
WinRT.GraphicsCapture
Windows 10 1803
DirectX
WinRT
Compare with capture target
Capture Method
Window Capture
Desktop Capture
Outside of Desktop
HW Acceleration
DirectX Games
Win32.BitBlt
Yes
Yes
Yes
No
Yes
Win32.DesktopDuplication
No
Yes
No
Yes
Yes
Win32.DwmSharedSurface
Yes
No
Yes
No
Yes
Win32.DwmThumbnail
Yes
No
Yes
Yes
Yes
WinRT.GraphicsCapture
Yes
Yes
Yes
Yes
Yes
Compare with capture source
Capture Method
Window Handle
Monitor Handle
Another
Win32.BitBlt
Yes
No
-
Win32.DesktopDuplication
No
No
Device (Monitor)
Win32.DwmSharedSurface
Yes
No
-
Win32.DwmThumbnail
Yes
No
-
WinRT.GraphicsCapture
Yes *
Yes *
Embedded Picker
*: Require Windows 10 1903 or greater.
Capture Method
Delay (ms)
Win32.BitBlt
~ 20ms
Win32.DesktopDuplication
N/A
Win32.DwmSharedSurface
~ 20ms
Win32.DwmThumbnail
0ms
WinRT.GraphicsCapture
~ 40ms
I used this video to investigate the delay.
It is just a reference value, but it is certain that the delay of Win32.DwmThumbnail
is 0 ms.
This is because it uses a drawing method that is entirely common to other windows.
This project is licensed under the MIT license.