none
In C# einen Screenshot speichern auf Desktop (Zugriff auf C Partition) RRS feed

  • Frage

  • Hallo,

    ich habe, soeben ein kleines Screenshot Programm gemacht, dass mir beim Drücken eines Buttons einen Screenshot erstellt und dann auf den Desktop abspeichern soll!

    Zum Abspeichern: Ich möchte, dass alle Benutzer eines Computers den Screenshot auf den Desktop abgespeichert bekommen und nicht nur der Benutzer der gerade eingeloggt ist!

    Mein bisheriges vorgehen:

    this.Hide(); // Fenster wird versteckt um nicht am Screenshot zu sein Thread.Sleep(220); // 220 ms Verzögerung bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); gfx = Graphics.FromImage(bmp); gfx.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy); this.Show(); // fenster wird wieder angezeigt Thread.Sleep(300); // 300 ms verzögerung try { bmp.Save("E:\\temp.png"); // bei diesen Versuch auf eine andere Partition funktioniert //das speichern einwandfrei

    // bmp.Save("C:\\temp.png"); // bei dieser Anweisung wird immer auf den catch Block verwiesen..... } catch (Exception) { Messagebox.Show(Nicht geklappt!"); }

    bei der 2 Anweisung bmp.Save("C:\\temp.png"); habe ich probiert ob er mich überhaupt auf die Partition abspeichern lässt - jedoch tut er das nicht....

    Kann ich das irgendwie umgehen und dann auf den Desktop abspeichern lassen?

    Danke vielmals..

    (bin noch Anfänger.... erst 1 Jahr Programmierung in der Mechatronik und möchte mir es aber jetzt mit Hilfe von kleinen Spaßprogrammen aneigenen.... wenn jemand eine Buchempfehlung hätte, wäre ich sehr froh darüber)

    mfg 

    Michael 16


    • Bearbeitet roessi123 Samstag, 21. Juni 2014 07:58
    Samstag, 21. Juni 2014 07:49

Antworten

  • Hallo,
    das dürfte ein Problem mit den Berechtigungen sein. Standardmäßig wird das Programm nicht mit Adminrechten gestartet (obwohl du vlt. ein Admin bist) - und somit hat das Programm keine Schreibrechte auf C:\.

    Du musst dem Programm also mitteilen, das es Administrator Rechte benötigt. Mache dazu einen Rechtsklick auf die Projektmappe im Projektmappenexplorer und Wähle Hinzufügen > Neues Element.... Dort wählst du die Vorlage Anwendungsmanifestdatei aus und klickst auf Hinzufügen. (Namen der Datei nicht ändern.)
    In der erstellten Datei musst du nun diese Zeile:

    <requestedExecutionLevel level="asInvoker" uiAccess="false" />

    In diese abändern:

    <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

    Dadurch wird Windows beim starten des Programms mit geteilt, das Adminrechte benötigt werden. Wenn der Benutzer keine Adminrechte hat, muss er das Adminkennwort eingeben.

    Um nun bei njedem Benutzer auf dem Desktop zu speichern, kannst du den öffentlichen Desktoppfad verwenden:

    var desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory);

    Alle Dateien, die dort liegen, werden bei jedem auf demDesktop angezeigt.

    Wenn dagegen jeder seine eigene Kopie haben soll, wird es schwieriger. Im Moment fand ich auch nur das hier, dort wird vorgeschlagen es über eine WinAPI Funktion zu versuchen.

    PS: Poste bitte in Zukunft immer die exakte Fehlermeldung mit. Der Fehler ist selten so eindeutig, wir hier.

    In sachen Bücher gibt es viele, die du lesen kannst. Beispielsweise gibt es die Open Books, die du kostenlos im Internet lesen kannst: http://openbook.galileocomputing.de/visual_csharp_2012/

    In meinen Programmieranfängen laß ich beispielsweise das Buch Visual C# 2010. Mittlerweile würde ich dir aber dazu raten ein Buch zu lesen, das auch neuere Themen wie die App Entwicklung mit behandelt.

    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Samstag, 21. Juni 2014 09:57
    Moderator
  • Hallo Michael,
    wenn jemand eine Buchempfehlung hätte, wäre ich sehr froh darüber

    schau doch mal hier:

      http://openbook.galileocomputing.de/visual_csharp_2012/

    Das wäre doch evtl. was für dich.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Samstag, 21. Juni 2014 13:13
    Moderator

Alle Antworten

  • Hallo,
    das dürfte ein Problem mit den Berechtigungen sein. Standardmäßig wird das Programm nicht mit Adminrechten gestartet (obwohl du vlt. ein Admin bist) - und somit hat das Programm keine Schreibrechte auf C:\.

    Du musst dem Programm also mitteilen, das es Administrator Rechte benötigt. Mache dazu einen Rechtsklick auf die Projektmappe im Projektmappenexplorer und Wähle Hinzufügen > Neues Element.... Dort wählst du die Vorlage Anwendungsmanifestdatei aus und klickst auf Hinzufügen. (Namen der Datei nicht ändern.)
    In der erstellten Datei musst du nun diese Zeile:

    <requestedExecutionLevel level="asInvoker" uiAccess="false" />

    In diese abändern:

    <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

    Dadurch wird Windows beim starten des Programms mit geteilt, das Adminrechte benötigt werden. Wenn der Benutzer keine Adminrechte hat, muss er das Adminkennwort eingeben.

    Um nun bei njedem Benutzer auf dem Desktop zu speichern, kannst du den öffentlichen Desktoppfad verwenden:

    var desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory);

    Alle Dateien, die dort liegen, werden bei jedem auf demDesktop angezeigt.

    Wenn dagegen jeder seine eigene Kopie haben soll, wird es schwieriger. Im Moment fand ich auch nur das hier, dort wird vorgeschlagen es über eine WinAPI Funktion zu versuchen.

    PS: Poste bitte in Zukunft immer die exakte Fehlermeldung mit. Der Fehler ist selten so eindeutig, wir hier.

    In sachen Bücher gibt es viele, die du lesen kannst. Beispielsweise gibt es die Open Books, die du kostenlos im Internet lesen kannst: http://openbook.galileocomputing.de/visual_csharp_2012/

    In meinen Programmieranfängen laß ich beispielsweise das Buch Visual C# 2010. Mittlerweile würde ich dir aber dazu raten ein Buch zu lesen, das auch neuere Themen wie die App Entwicklung mit behandelt.

    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Samstag, 21. Juni 2014 09:57
    Moderator
  • Hallo Michael,
    wenn jemand eine Buchempfehlung hätte, wäre ich sehr froh darüber

    schau doch mal hier:

      http://openbook.galileocomputing.de/visual_csharp_2012/

    Das wäre doch evtl. was für dich.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Samstag, 21. Juni 2014 13:13
    Moderator