Hallo,
ich möchte einen Screenshot erstellen und dabei auf dem Screenshot meinen aktuellen Dialog nicht sichtbar haben.
<Button Command="{Binding ScreenshotCommand}">Take Screenshot</Button>
public void ScreenshotCommandExecute()
{
try
{
double screenLeft = SystemParameters.VirtualScreenLeft;
double screenTop = SystemParameters.VirtualScreenTop;
double screenWidth = SystemParameters.VirtualScreenWidth;
double screenHeight = SystemParameters.VirtualScreenHeight;
using (Bitmap bmp = new Bitmap((int)screenWidth,
(int)screenHeight))
{
using (Graphics g = Graphics.FromImage(bmp))
{
String filename = "CPMS-" + DateTime.Now.ToString("ddMMyyyy-hhmmss") + ".png";
g.CopyFromScreen((int)screenLeft, (int)screenTop, 0, 0, bmp.Size);
bmp.Save("E:\\" + filename);
}
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
So erzeuge ich momentan den Screenshot. Ich bin hier momentan in einem UserControl unterwegs, das durch einen ContentPresenter dargestellt wird. Dieses ist aber nur ein Teil des gesamten Dialogs.
Und was ist Deine Frage?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich vermute stark, dass die Frage lautet, wie der dialog ausgeblendet werden muss.
Da der code zum generieren und speichern des Screenshots ja vorhanden ist und soweit auch funktionieren sollte.
Eine Lösung wäre es den Dialog einfach zu minimieren, Screenshot machen und Dialog wieder zu maximieren.
Dazu brauchst du vermutlich noch eine Referenz auf deinen Dialog.
Diese solltest du aber über dein User Control haben, da das User Control auch einen Parent haben müsste, was dann dein Dialog bzw. das Control in dem dein Dialog ist, sein dürfte.
Bin aber in WPF nicht tief genug drin um dir die technischen Mittel dazu zugegeben.
Schau mal ob du in der Doku dazu fündig wirst.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Wenn man einen Screenshot ohne das aktuelle Fenster erstellen möchte, dann braucht man das aktuelle Fenster einfach nur ausblenden. Vor dem Screenshot Visibility auf Visibility.Hidden und hinterher auf Visibility.Visible setzen reicht.
Das Problem hier ist die Verwendung eines UserControls für die falschen Zwecke. Ein UserControl ist lediglich für die Darstellung bzw. die Eingabe eines Wertes da. Anwendungslogik, wie z.B. Screenshots zu erstellen, haben dort einfach nichts zu suchen. So etwas gehört in ein Command im ViewModel des Fensters.
Weeks of programming can save you hours of planning