私はあなたが(壁紙とアイコンで)実際のデスクトップ、そして他には何の写真を撮るために撮影している印象を受けます。
1)現在のデスクトップ領域にコピーするCOM
2)使用Graphics.CopyFromScreenを使用してShell32はでコールToggleDesktop()
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;
}
は、複数のモニタシナリオに味に調整します。
は、ここで私は一緒にホイップ更新されたバージョンです。
私は自分のアプリケーションにフォーカスがある場合があることを行うことができます:ここを見てみましょうか?デスクトップの前にいる場合は、アプリケーションウィンドウ(および他のもの)をキャプチャしませんか? – Damovisa
私は 'GetDesktopWindow'を試しましたが、デスクトップの前にあるウィンドウをキャプチャします –
完全なソースコードサンプルを扱う最終的な解決策はどれですか? – Kiquenet