Seite 1 von 1

Screenshots erstellen mit ImageGrab

Verfasst: Donnerstag 12. Februar 2009, 12:32
von unix
Hallo,

eine Funktion von mir soll immer aufgerufen werden um Screenshots zu erstellen.
Mein Code dazu sieht wie folgt aus:

Code: Alles auswählen

import ImageGrab 
def screenshot(language, title):
    img = ImageGrab.grab()
    #filename = "C:\screenshot.png"
    filename = "C:\PA_" + language + "_" + title + ".png"
    img.save(filename) 
Das Problem dabei für mich ist, dass der Screenshot vom gesamten Screen aufgenommen wird. Ich würde es hingegen wollen, dass nur von der entsprechende Applikation ein Screenshot erstellt wird.
Wie kann ich dies am besten realisieren?

Ein anderes Problem das ich habe, ist, dass ich gerne ein bestimmtes Programm beenden würde. Dazu soll eine Funktion aufgerufen werden die überprüft ob das Spiel Tetris.exe läuft (Taskmanager?) und dieses beenden. Wie kann ich dies am besten realisieren?

Die Lösung soll für Windows funktionieren.

Grüße,

Verfasst: Donnerstag 12. Februar 2009, 14:33
von CM
Wenn ich den Code (PIL-Version 1.1.6) richtig verstehe, geht das nicht. Du kannst allenfalls das Gebiet vorgeben, wo der Screenshot erfolgen soll. Default ist eben der ganze Bildschirm. Bei einer selbstgeschriebenen Applikation ist das kein Problem (Du weißt ja, wo der Frame sitzt, von dem der Screenshot erfolgen soll ;-) ). Ansonsten: Keine Ahnung, ob es da Windows-Tricks gibt - sonst jemand?

HTH
Christian

PS Wäre schön, wenn Du das nächste Mal sagst, welche Pakete Du nutzt: Nicht jeder weiß auf Anhieb, daß ImageGrab aus PIL stammt.

Verfasst: Freitag 13. Februar 2009, 09:21
von veers
Warum zum Teufel nennst du dich unix aber suchst nach einer Windows Lösung? Den Prozess und dessen Fenster kannst du mit der Win32 API finden. Ansprechen kannst du diese mit ctypes. Beispiele dazu findest du hier im Forum. Zum Fenster finden gibt es in der win32 api FindWindowEx. Dessen Grösse/Position kannst du mit GetWindowRect finden. Zum Prozesse auflisten findest du hier ein Snippet: http://code.activestate.com/recipes/576362/.

- Jonas

Re: Screenshots erstellen mit ImageGrab

Verfasst: Freitag 13. Februar 2009, 11:49
von numerix
unix hat geschrieben:Das Problem dabei für mich ist, dass der Screenshot vom gesamten Screen aufgenommen wird. Ich würde es hingegen wollen, dass nur von der entsprechende Applikation ein Screenshot erstellt wird.
Wie kann ich dies am besten realisieren?
Du könntest mal einen Blick auf bzw. in das Modul frog werfen. Dort gibt es eine Methode snapshot, die u.a. eine Variante unter Verwendung von ImageGrab enthält, um auch Teile des Bildschirms zu knipsen. Im Grunde ist das aber nichts anderes als CM schon gesagt hat.

Verfasst: Mittwoch 18. Februar 2009, 11:05
von unix
Danke für eure Vorschläge.
Frog kommt wohl nicht in Frage, da ich dies für dieses Projekt nicht installieren darf.

Der Screenshot muss nicht unbedingt nur von der Applikation sein, es reicht auch, wenn ein Screenshot von einem bestimmten Bereich (beispielsweise Mitte des Bildschirms mit der Größe 800x600 - alles was sich außerhalb befindet (quasi ein Viereck in einem Viereck), soll nicht mit auf dem Screenshot sein) gemacht wird.
Du kannst allenfalls das Gebiet vorgeben, wo der Screenshot erfolgen soll.
Die Lösung mit bbox erzielt den gewünschten Effekt, Danke. :)

Verfasst: Mittwoch 18. Februar 2009, 12:59
von Leonidas
unix hat geschrieben:Frog kommt wohl nicht in Frage, da ich dies für dieses Projekt nicht installieren darf.
Es ging ja auch nicht darum es zu nutzen sondern nachzuschauen wie es implementiert ist.