我正在用C#编写,但如果在另一种语言中有更好的解决scheme,我愿意接受。
为了澄清,我需要Windows桌面的屏幕截图 – 这只是壁纸和图标, 没有应用程序或任何重点。
尺寸大于屏幕尺寸的屏幕截图
在python中截取应用程序,无论前面是什么
用adb&perl捕获android设备屏幕截图
Python截图2+监视器(Windows)
从GPU获取完整的桌面屏幕截图
如何在Windows上捕获桌面,以便捕获directX和正常渲染的屏幕部分?
winAPI BitBlt只能在某些应用程序中捕获窗口
命令行程序创build网站截图(在Linux上)
Android截图和Screencap权限
您正在寻找Graphics.copyFromScreen 。 创建一个正确大小的新位图,并传递要复制的区域的位图的图形对象屏幕坐标。
还有一篇文章描述如何以编程方式拍摄快照。
回应编辑 :我误解了你的意思是“桌面”。 如果你想拍摄桌面的照片,你必须:
首先使用Win32API最小化所有窗口 (发送MIN_ALL消息)
拍快照
然后撤消最小化全部(发送一个MIN_ALL_UNDO消息)。
更好的方法是不要打扰其他窗口,而是直接从桌面窗口复制图像。 User32中的GetDesktopWindow将返回一个桌面的句柄。 一旦你有窗口句柄,得到它的设备上下文,并复制图像到一个新的位图。
CodeProject上有一个关于如何从中复制图像的很好的例子 。 在“捕获窗口内容”部分中查找有关获取和创建设备上下文的示例代码。
我得到的印象是,你正在拍摄的实际桌面(墙纸和图标),而不是别的。
1)使用COM调用Shell32中的ToggleDesktop()
2)使用Graphics.copyFromScreen复制当前的桌面区域
3)调用ToggleDesktop()恢复以前的桌面状态
编辑:是的,调用MinimizeAll()是好战的。
这是我一起鞭打的更新版本:
/// <summary> /// Minimizes all running applications and captures desktop as image /// Note: Requires reference to "Microsoft Shell Controls and Automation" /// </summary> /// <returns>Image of desktop</returns> private Image CaptureDesktopImage() { //May want to play around with the delay. TimeSpan ToggleDesktopDelay = new TimeSpan(0,150); Shell32.ShellClass ShellReference = null; Bitmap WorkingImage = null; Graphics WorkingGraphics = null; Rectangle TargetArea = Screen.PrimaryScreen.WorkingArea; Image ReturnImage = null; try { ShellReference = new Shell32.ShellClass(); ShellReference.ToggleDesktop(); System.Threading.Thread.Sleep(ToggleDesktopDelay); WorkingImage = new Bitmap(TargetArea.Width,TargetArea.Height); WorkingGraphics = Graphics.FromImage(WorkingImage); WorkingGraphics.copyFromScreen(TargetArea.X,TargetArea.X,TargetArea.Size); System.Threading.Thread.Sleep(ToggleDesktopDelay); ShellReference.ToggleDesktop(); ReturnImage = (Image)WorkingImage.Clone(); } catch { System.Diagnostics.Debugger.Break(); //... } finally { WorkingGraphics.dispose(); WorkingImage.dispose(); } return ReturnImage; }
调整为多个监视器场景的味道(虽然听起来像这应该适用于您的应用程序很好)。
您可以通过p / invoke使用GetDesktopWindow ,然后获取设备上下文并获取快照。 这里有一个非常详细的教程。 这可能比扰乱现有的窗口更好。
所有以前的答案是完全错误的( 最小化应用程序是荒谬的 )
简单地使用SHW api: 一行代码(桌面位图被缓存,api只是将它抹到你的HDC上)
您可以在应用程序运行之前在Windows启动时捕获屏幕截图,或使用桌面切换使用其他桌面。 看看这里: http : //www.codeproject.com/Articles/7666/Desktop-Switching切换到其他桌面,拍照,记住你不需要显示它只是创建“DESKTOP”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。