当桌面被阻止时,如何在c#中进行屏幕截图(可能是低级别的)
本文关键字:屏幕截图 桌面 | 更新日期: 2023-09-27 18:00:35
我尝试用代码获取屏幕截图(windows 8),并在桌面被阻止时获得黑屏:
public static Bitmap ImageFromScreen()
{
Graphics gr;
Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height,PixelFormat.Format32bppRgb);
gr = Graphics.FromImage(bmp);
gr.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y,
0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
return bmp;
}
您没有。
除了窗口缓存(它不可访问,也不必存在),数据根本不存在。你必须伪造WM_PAINT消息,并迫使应用程序绘制到你的表面(大多数控件将从wParam
中获取HDC;这仍然排除了大量写得不好(或不是Windows本机)的应用程序——即使这样,这在大多数情况下也不会起作用,比如当窗口最小化或桌面锁定时。
你实际上想做什么
编辑:
好吧,很明显,你是在明确地谈论"锁定屏幕"的情况——在这种情况下,无法获得桌面的屏幕截图——它并不真的存在。锁定屏幕存在于另一个会话中,因此您不再与"隐藏"用户会话有任何连接。这类似于在断开远程桌面连接后尝试在服务器应用程序上截屏-没有什么可拍的。可能会强制一些应用程序绘制到您的上下文中,但这些都不起作用。