[英]Is there a way to take a screenshot of the user's Windows desktop?
我想在我的應用程序中為用戶提供其桌面的縮小版屏幕截圖。
有沒有辦法截取當前用戶的Windows桌面?
我正在用C#編寫,但是如果用另一種語言有更好的解決方案,我會對它持開放態度。
為了澄清,我需要一個Windows桌面的截圖 - 這只是壁紙和圖標; 沒有應用程序或任何有重點的東西。
您正在尋找Graphics.CopyFromScreen 。 創建一個正確大小的新位圖,並傳遞要復制的區域的Bitmap的Graphics對象屏幕坐標。
還有一篇文章描述了如何以編程方式拍攝快照。
回復編輯 :我誤解了“桌面”的含義。 如果你想拍攝桌面照片,你必須:
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, 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;
}
根據多種監視器場景調整味道(雖然聽起來這應該適用於您的應用程序)。
您可以通過p / invoke查看使用GetDesktopWindow ,然后獲取設備上下文並拍攝快照。 有一個非常詳細的教程在這里 。 它可能比擾亂現有的窗戶更好。
您可以在應用程序運行之前始終在Windows啟動時捕獲屏幕截圖,或使用桌面切換使用其他桌面。 看看這里: http : //www.codeproject.com/Articles/7666/Desktop-Switching切換到其他桌面,拍照並記住你不需要顯示它只是創建它“DESKTOP”
所有以前的答案都是完全錯誤的( 最小化應用程序是荒謬的 )
只需使用SHW api: 一行代碼(緩存的桌面位圖,api只是將它暴露給你的HDC ......)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.