As a follow up for C# – Screen capture with Direct3D, here is how to enable and disable composition (Aero) on Windows Vista and Windows 7.
If you are attempting to capture screen contents on Vista/Windows 7 without using DWM (e.g. BitBlt or the Direct3D approach linked above) – it is necessary to first disable composition.
Simply disable when your application starts with a call to Spazzarama.ScreenCapture.DWM.Composition.EnableComposition(false);
, and re-enable when your application closes: Spazzarama.ScreenCapture.DWM.Composition.EnableComposition(true);
.
using System; using System.Runtime.InteropServices; namespace Spazzarama.ScreenCapture.DWM { public static class Composition { const uint DWM_EC_DISABLECOMPOSITION = 0; const uint DWM_EC_ENABLECOMPOSITION = 1; [DllImport("dwmapi.dll", EntryPoint = "DwmEnableComposition")] extern static uint DwmEnableComposition(uint compositionAction); /// <summary> /// Enable/Disable DWM composition (aka Aero) /// </summary> /// <param name="enable">True to enable composition, false to disable composition.</param> /// <returns>True if the operation was successful.</returns> public static bool EnableComposition(bool enable) { try { if (enable) { DwmEnableComposition(DWM_EC_ENABLECOMPOSITION); } else { DwmEnableComposition(DWM_EC_DISABLECOMPOSITION); } return true; } catch { return false; } } } }