Dam*_*isa 15 c# windows desktop screenshot
我想在我的应用程序中为用户提供其桌面的缩小版屏幕截图.
有没有办法截取当前用户的Windows桌面?
我正在用C#编写,但如果有另一种语言的更好的解决方案,我会对它持开放态度.
为了澄清,我需要一个Windows桌面的截图 - 这只是壁纸和图标; 没有应用程序或任何有重点的东西.
lc.*_*lc. 16
您正在寻找Graphics.CopyFromScreen.创建一个正确大小的新位图,并传递要复制的区域的位图的图形对象屏幕坐标.
还有一篇文章描述了如何以编程方式拍摄快照.
回复编辑:我误解了"桌面"的含义.如果你想拍摄桌面照片,你必须:
MIN_ALL
消息)最小化所有窗口MIN_ALL_UNDO
消息).更好的方法是不要打扰其他窗口,而是直接从桌面窗口复制图像.User32中的GetDesktopWindow将返回桌面的句柄.获得窗口句柄后,获取它的设备上下文并将图像复制到新的位图.
CodeProject上有一个很好的例子,说明如何从中复制图像.在"捕获窗口内容"部分中查找有关获取和创建设备上下文的示例代码.
Rob*_*les 10
我得到的印象是你正在拍摄实际桌面(带有壁纸和图标)的照片,而没有别的.
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, 0, 0, 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, 0, 0, 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;
}
Run Code Online (Sandbox Code Playgroud)
根据多种监视器场景调整味道(虽然听起来这应该适用于您的应用程序).
归档时间: |
|
查看次数: |
12252 次 |
最近记录: |