Screenshot machen und abspeichern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Bong-Jour
User
Beiträge: 54
Registriert: Donnerstag 24. Juli 2008, 13:14
Kontaktdaten:

Hallo Leute, ich habe bereits versucht mit der Forumsuche etwas zu finden, aber es gelingt einfach nicht... Ich möchte gerne einen Screenshot machen und diesen abspeichern, um zu sehen was mein Programm macht, während ich nicht da bin :) Für Text habe ich eine ganz simple Lösung gefunden:

Code: Alles auswählen

import win32clipboard, win32con
win32clipboard.OpenClipboard()
Text_aus_dem_Speicher = win32clipboard.GetClipboardData(win32con.CF_TEXT)
Kann mir jemand helfen ? An den Screenshot würde ich gerne über SendInput Drucktaste kommen und es dann einfach in eine Datei schreiben.
Das ist kein Hakenkreuz - Das ist das neue Python-Symbol!
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das geht mit PIL, zumindest unter Windows (angeblich ;-)

Schau mal hier, Posting Nr. 3. Doku dazu: http://www.pythonware.com/library/pil/h ... gegrab.htm

Unter Python 2.6.5., Ubuntu 10.04, funktioniert es jedenfalls nicht.

Gruß, noisefloor
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

http://www.python-forum.de/viewtopic.php?f=1&t=17798
Wie noisefloor schon sagte ImageGrab ist Teil von PIL.

Wenn du eine funktionierende Lösung für Linux brauchst musst du das Frog Module mal durchschauen.
Bong-Jour
User
Beiträge: 54
Registriert: Donnerstag 24. Juli 2008, 13:14
Kontaktdaten:

Hm... In meiner Vorstellung lies sich irgengwie alles in ein paar eigenen Zeilen realisieren.. Aber ich kriege es nicht mal gebacken einen simplen Buchstaben über SendInput zu verschicken oO

Weiß jemand, wie das geht ?

Code: Alles auswählen

ctypes.windll.user32.SendInput(nInputs, pInputs, cbSize)
SendInput(
__in UINT nInputs,
__in LPINPUT pInputs,
__in int cbSize
);

Parameters
nInputs [in]
UINT
Number of structures in the pInputs array.

pInputs [in]
LPINPUT
Pointer to an array of INPUT structures. Each structure represents an event to be inserted into the keyboard or mouse input stream.

cbSize [in]
int
Specifies the size, in bytes, of an INPUT structure. If cbSize is not the size of an INPUT structure, the function fails.
Das ist kein Hakenkreuz - Das ist das neue Python-Symbol!
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Ich würde nie versuchen, dem OS irgendwelche Tasten unterzujubeln, wenn es auch anders geht. Sobald nämlich z.B. ein anderssprachiges OS dahinterhängt, fällt sowas meist auf die Nase. Hast du denn PIL schonmal ausprobiert?
Bong-Jour
User
Beiträge: 54
Registriert: Donnerstag 24. Juli 2008, 13:14
Kontaktdaten:

Mein OS würde nie anderssprachig mit mir reden.. Wir kennen uns jetzt schon seit vielen Jahren =) PIL habe ich mir jetzt mal in der Hoffnung runtergeladen, herauszufinden wie der Typ das gemacht hat. Aber is ne Menge Code...
Das ist kein Hakenkreuz - Das ist das neue Python-Symbol!
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Es ist keine Schande externe Libs zu nutzen.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

In Java ist das plattformübergreifend ein Dreizeiler mittels `java.awt.Robot#createScreenCapture`. Gefummel mit externen Bibliotheken unnötig. Vielleicht einfach ein kleines Java-Programm aus Python heraus aufrufen? ;)

Stefan
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Oder Jython...
the more they change the more they stay the same
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

sma hat geschrieben:In Java ist das plattformübergreifend ein Dreizeiler mittels `java.awt.Robot#createScreenCapture`. Gefummel mit externen Bibliotheken unnötig. Vielleicht einfach ein kleines Java-Programm aus Python heraus aufrufen? ;)

Stefan
Ketzer! Hängt ihn!
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Hab was gefunden, was die helfen könnte. http://www.blog.pythonlibrary.org/2010/ ... -print-it/
Du brauchst dafür wxPython sonst nix :D
the more they change the more they stay the same
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

sma hat geschrieben:In Java ist das plattformübergreifend ein Dreizeiler mittels `java.awt.Robot#createScreenCapture`. Gefummel mit externen Bibliotheken unnötig. Vielleicht einfach ein kleines Java-Programm aus Python heraus aufrufen? ;)
Stefan
Ja, in Python ist halt keine GUI mit integriert. (Und Tk zählt hier IMHO nicht, ist auch nicht auf jedem System standardmäßig dabei).
Bong-Jour
User
Beiträge: 54
Registriert: Donnerstag 24. Juli 2008, 13:14
Kontaktdaten:

Natürlich ist es keine Schande externe Libs zu nutzen.. Ich benutze ja auch ein Betriebssystem, ohne dass ich es selbst geschrieben hab ;) Allerdings scheint das ganze über den Aufruf einer simplen C Funktion möglich zu sein. Und das ärgert mich, dass ich das nich hinkriege..


Habe grade mal das Beispiel von Dav!d überflogen. Das sieht super aus. Dickes Danke!
Das ist kein Hakenkreuz - Das ist das neue Python-Symbol!
Antworten