Laden...

Screenshot erstellen und dabei aktuellen Dialog ausblenden

Erstellt von Kruemel999 vor 4 Jahren Letzter Beitrag vor 4 Jahren 808 Views
K
Kruemel999 Themenstarter:in
3 Beiträge seit 2020
vor 4 Jahren
Screenshot erstellen und dabei aktuellen Dialog ausblenden

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.

16.835 Beiträge seit 2008
vor 4 Jahren

Und was ist Deine Frage?

T
2.224 Beiträge seit 2008
vor 4 Jahren

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.

Doku

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.

5.658 Beiträge seit 2006
vor 4 Jahren

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