Screenshot per Makro

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Screenshot per Makro

Re: Screenshot per Makro

von craig22 » Mi, 20.10.2021 19:50

Hallo Pit,

ich habe einen neuen Thread erstellt...

@karolus
Vielen Dank für die Info's.
Es funktioniert und ich werde mich damit noch ein wenig beschäftigen.

Re: Screenshot per Makro

von erikafuchs » Mi, 20.10.2021 17:34

Ihr seid ja alle so lieb. Ich will mich aber nochmal selbst zitieren:
erikafuchs hat geschrieben: Mo, 18.10.2021 13:12 Ansonsten habe ich ja schon weiter oben geschrieben, halte ich es zwischenzeitlich für einfacher, wenn diejenigen, die mit der Meldung "Ergebnis richtig, Rechnung falsch" händisch einen Screenshot machen und abspeichern würden (Auch wenn dazu einige Kids nicht in der Lage sind). Der Screenshot per Pythonscript interessiert mich jetzt aber rein akademisch. Eingebaut hätte ich das wohl nur, wenn es einfach, mit kurzem Code, zu lösen gewesen wäre.
Ich fürchte, ich kann Euch bei dieser Diskussion nur bedingt folgen. Schon bei dem Versuch die von Craig genannten Pakete zu installieren habe ich Probleme bekommen. Ich bin immer noch in Spanien und Frankreich unterwegs und möglicherweise ist mein mitgeführtes Laptop hier schon zu schmalbrüstig.

Re: Screenshot per Makro

von Karolus » Mi, 20.10.2021 16:34

Der Screenshot wird nur erstellt, wenn die Screenshotanweisungen ausserhalb der Funktion stehen.
Achso, du führst die ganze Datei aus Geany heraus aus, und nicht die Funktion…

Dann musst du aber auch die Funktionsausführung in die Datei packen.

Code: Alles auswählen

import pyautogui

def function_screen(file_path):	
    screenshot = pyautogui.screenshot()
    screenshot.save(file_path)
    print(f"screenshot saved to path: {file_path}")	

if __name__  ==  "__main__":
    function_screen("screen1.png")
Beachte auch bitte das ich in die Signatur das Argument 'file_path' aufgenommen habe, und die Funktion unten auch mit Übergabe des Dateinamens 'screen1.png' ausführe

Geany kann ich auch, gehe zu
  • →Dokument→Art der Einrückung→[x]Leerzeichen
  • →Dokument→Einzugsbreite→[x]4
  • →Dokument→Tabulatoren durch Leerzeichen ersetzen

Re: Screenshot per Makro

von craig22 » Mi, 20.10.2021 14:50

Hallo karolus,

danke.

Ich nutze die Geany-IDE zum testen, dort ist der Einzug per default auf 4 Leerzeichen eingestellt.
Wenn ich aber die leere Printanweisung mit nur einem Tab einrücke, funktioniert der Screenshot nicht.
Er wird abgearbeitet, aber es passiert nichts.

Bedeutete wohl Programmende ohne Fehler (Code 0):
------------------
(program exited with code: 0)
Drücken Sie eine beliebige Taste . . .
Gleiches passiert, wenn ich Deinen zuletzt geposteten Code nutze.
Der Screenshot wird nur erstellt, wenn die Screenshotanweisungen ausserhalb der Funktion stehen.
Die Funktion-Definition habe ich eingebaut, damit man aus der Basic-IDE heraus auf den Funktionsnamen zugreifen kann.

Statt der leeren Print-Anweisung habe ich nun ein NONE eingefügt, dies funktioniert auch.
Ohne eine Angabe unterhalb der Funktions-Definition, erhalten ich sofort einen Fehler:
File "C:\temp 2021\__Test\Test Geany Python\MyScreenshot2.py", line 6
time.sleep(1)
^
IndentationError: expected an indented block
------------------
(program exited with code: 1)

Drücken Sie eine beliebige Taste . . .
Wie beschrieben nutze ich nun die NONE-Anweisung, gefolgt von den Screenshot-Anweisung(ohne Einrückungen).

Code: Alles auswählen

import pyautogui
import time

def function_screen():
	none
time.sleep(1)
screenshot = pyautogui.screenshot()
screenshot.save("xyzObst.png")
karolus hat geschrieben:Ich hatte es damals (mit verschiedenen Versionen von AOO und LO ( von der Distribution und von Libreoffice direkt) so gelöst,
Das hatte ich im Netz auch gelesen und ich habe den Inhalt der site-packages in den betreffenden LO-Ordner kopiert.
Dann habe ich LO-Python in der Console (install...) aufgerufen und erhielt neue Fehler.
Es gibt Installations-Pakete, welche bei der Installation DLL's in der Windows-Registry registrieren wollen. Dies schug fehl.
Ich habe dann eine manuelle Registirung der DLL's durchgeführt, gemäß dem Motto Augen zu und durch, brachte auch keinen Erfolg.
Auch ein Anpassen der Umgebungsvariablen hat noch nicht geholfen.
karolus hat geschrieben:und es gibt auch noch jemanden der glaubt das robust zu lösen??
Danke für den Link.

@Hiker
Auch Dir Danke ich für Deine Hilfe.

Abseits vom Thema :)
Die Office-Pakete (LO/ AOO) bringen bei der Installation keine eigene JAVA-JRE mit.
Es ist ggf. eine Nachinstallion nötig. Nun verstehe ich ja, dass Python für die UNO-Brigdes erforderlich ist.
Da wäre es doch zukunftorientiert, wenn bei der Installation schlichtweg ein aktueller Python-Download und dessen Installation vorausgeht.
Die Python-Installation sollte dann in einem zentralen Ordner erfolgen, so dass von allen anderen Programmen ein Zugriff über die Umgebungsvariablen möglich ist.

Wenn ich mit dieser und ein paar anderen Aufgaben fertig bin, werde ich mal die verschiedenen Bugzilla's bemühen sich dem Thema anzunehmen.
Denn die heutige Lösung -- Office,etc. und Python -- ist ein wahres Gewurstel, da kommt nicht einmal eine gescheite Mettwurst bei raus:)

Re: Screenshot per Makro

von Karolus » Mi, 20.10.2021 11:15

craig22 hat geschrieben: Di, 19.10.2021 20:48 Hallo Karolus,

Ok, ich habe vestanden.

Mein Pythonscript funktioniert:

Code: Alles auswählen

import pyautogui
import time

def function_screen():
		Print("")

screenshot = pyautogui.screenshot()
time.sleep(1)
screenshot.save("xyzObst.png")
Auch wenn es "funktioniert" du hast da ein paar Fehler drin
  • der Einzug unterhalb 'def function_screen' beträgt 2 mal <tab>
    sorge dafür das eine Einzugstiefe immer aus 4 Leerzeichen besteht
    Dein Editor hat dafür auch wahrscheinlich die Einstellungsmöglichkeit 1 mal <tab> direkt durch 4 Leerzeichen zu ersetzen
  • Dein eigentlicher Code steht dann wieder auf Modulebene, sollten die letzten drei Zeilen nicht auch in die Function hinein mit dem entsprechenden Einzug von 4 Leerzeichn
  • was soll die 'Print("")' -zeile, die im echten Code hoffentlich klein geschrieben ist? das 'time.sleep(1)' erscheint mir auch überflüssig, wenns ne Vezögerung des Screenshots bewirken soll muss es vorher gemacht werden.

Code: Alles auswählen

import pyautogui
import time

def function_screen():
    time.sleep(1)
    screenshot = pyautogui.screenshot()
    screenshot.save("xyzObst.png")
craig22 hat geschrieben: Di, 19.10.2021 20:48 Nur wenn ich das Scriptprovider-Gewurstel laufen lassen, greift Office auf das interne Python zurück.
Dort sind aber die Packages nicht installiert und irgendwie verweigert das interne Python die Installationen.

Ich finde es ziemlich bescheuert, dass jedes Programm(*) die eigene Pythonumgebung installiert.
(*)
AOO
LO
GIMP
usw.
Die in Windows eingestellten Umgebungsvariablen werden von den einzelnen Programmen (*) schlicht weg ignoriert.
Das ist zunächst mal vor allem ein Windows-problem, das selbst keine Pythonumgebung mitinstalliert, das führt dann dazu, daß Benutzer die es selbst installieren, das quasi wie und wo es gerade passt tun…andere Programme (die einer Pythonumgebung bedürfen) machens dann ebenso.
Kann ich es irgendwie erreichen, dass zumindest AOO und LO auf meine Python39 zugreifen?
Ich hatte es damals (mit verschiedenen Versionen von AOO und LO ( von der Distribution und von Libreoffice direkt) so gelöst, das ich normal per:
pip install irgendwas --user
in meine Benutzer-SitePackages installiert habe.
und dann einfach den Inhalt von:
/home/$ich/.local/lib/python27/site-packages
in den Nachbarordner ………/python26/site-packages
reinkopiert habe. Vieleicht klappt das auch bei dir mit Windows?
und es gibt auch noch jemanden der glaubt das robust zu lösen??

Re: Screenshot per Makro

von Hiker » Mi, 20.10.2021 09:30

craig22 hat geschrieben: Mi, 20.10.2021 00:10 ...
Jörn hat geschrieben:Du könntest von Windows zu Linux wechseln.
Leider geht dies ein wenig am Thema dieses Threads vorbei, denn Der TE braucht dieses Makro für sich und seine Schüler!
Alles Winzigweich_Rechner!!!
Jörn hat geschrieben: Unter Windows müsste erstmal die Frage beantwortet werden, warum LO einige Module inklusive pip nicht mitliefert.
Auch dies entspricht nicht dem Thema.
...
Ok. Ein letzter Link zum Thema ersetzen des mitgelieferten Python (immerhin unter Windows, leider XP):
https://forum.openoffice.org/en/forum/v ... 45&t=26877

Viel Spass weiterhin, zum ursprünglichen Thema kann ich aktuell eher wenig beitragen.

Re: Screenshot per Makro

von Stephan » Mi, 20.10.2021 06:21

Also, was muss ich als Python-Laie tun, damit die erforderlichen Pakete innnerhalb der Officeumgebung installiert werden können.
Nach einfacher wäre es, wenn der Scriptprovider auf das externe Python (v3.9) zugreifen würde, denn damit habe ich das Scripz getestet.

Wer hat hierfür eine Lösung?
da das Ganze aus einer Datei heraus laufen soll (und mir die Kenntnisse fehlen wie Du zusätzliche Python-Module direkt lauffähig in die Datei integrierst) musst Du z.B. so vorgehen:

-in die Datei alle zusätzlich benötigten Python-Bibliotheken einpacken, siehe: http://de.openoffice.info/viewtopic.php?f=25&t=65927

-ein Basic-Makro in die Datei einfügen das die benötigten Python-Bibliotheken lokal nach ...\libreoffice\program\python-core-3.3.3 ... kopiert (siehe: http://de.openoffice.info/viewtopic.php ... 52#p295252)

-das eigentliche Python-Script dann per Makro auch nach ...\user\Scripts\Python\ kopieren

Nun sollte sich das Python-Script per Basic starten lassen.


Und, wie geschrieben, mir fehlen Kenntnisse, weshalb ich diesen Weg vorschlage. z.B. Karolus weiß wahrscheinlich wie man das Script UND die benötigten zusätzlichen Python-Bibliotheken so in die *.ods-Datei integriert, das sie direkt aus der *.ods-Datei heraus aufrufbar sind.



Gruß
Stephan

Re: Screenshot per Makro

von craig22 » Mi, 20.10.2021 00:10

Hallo Jörn,
Jörn hat geschrieben:Du könntest von Windows zu Linux wechseln.
Leider geht dies ein wenig am Thema dieses Threads vorbei, denn Der TE braucht dieses Makro für sich und seine Schüler!
Alles Winzigweich_Rechner!!!
Jörn hat geschrieben: Unter Windows müsste erstmal die Frage beantwortet werden, warum LO einige Module inklusive pip nicht mitliefert.
Auch dies entspricht nicht dem Thema.

_____________________________________________________
Jörn hat geschrieben:Als Lösung haben wir jetzt ein Python-script, dass unter Windows die Installation zusätzlicher Module erfordert.
Es ist noch keine Lösung, sondern ein funktionierendes Python-Script, welches per ScriptProvider gestartet werden kann.
Stephan hat doch ein Beispiel geliefert mit dies möglich ist.

Also, was muss ich als Python-Laie tun, damit die erforderlichen Pakete innnerhalb der Officeumgebung installiert werden können.
Nach einfacher wäre es, wenn der Scriptprovider auf das externe Python (v3.9) zugreifen würde, denn damit habe ich das Scripz getestet.

Wer hat hierfür eine Lösung?

Re: Screenshot per Makro

von Hiker » Mi, 20.10.2021 00:00

Da das eigentliche Thema ja eine Frage von erikafuchs war.

Die erste Idee war ja ein zusätzliches Programm (Irfanview) per Shell() aufzurufen, was aber eben eine zusätzliche Installation bedeutet.

Als Lösung haben wir jetzt ein Python-script, dass unter Windows die Installation zusätzlicher Module erfordert.

Irgendwie sehe ich den Fortschritt nicht so ganz..

Mfg, Jörn

Re: Screenshot per Makro

von Hiker » Di, 19.10.2021 23:50

craig22 hat geschrieben: Di, 19.10.2021 20:48 Kann ich es irgendwie erreichen, dass zumindest AOO und LO auf meine Python39 zugreifen?
Du könntest von Windows zu Linux wechseln.

Unter Windows müsste erstmal die Frage beantwortet werden, warum LO einige Module inklusive pip nicht mitliefert.

Mfg, Jörn

Re: Screenshot per Makro

von craig22 » Di, 19.10.2021 20:48

Hallo Karolus,

Ok, ich habe vestanden.

Mein Pythonscript funktioniert:

Code: Alles auswählen

import pyautogui
import time

def function_screen():
		Print("")

screenshot = pyautogui.screenshot()
time.sleep(1)
screenshot.save("xyzObst.png")
Nur wenn ich das Scriptprovider-Gewurstel laufen lassen, greift Office auf das interne Python zurück.
Dort sind aber die Packages nicht installiert und irgendwie verweigert das interne Python die Installationen.

Ich finde es ziemlich bescheuert, dass jedes Programm(*) die eigene Pythonumgebung installiert.
(*)
AOO
LO
GIMP
usw.
Die in Windows eingestellten Umgebungsvariablen werden von den einzelnen Programmen (*) schlicht weg ignoriert.

Kann ich es irgendwie erreichen, dass zumindest AOO und LO auf meine Python39 zugreifen?

Re: Screenshot per Makro

von Karolus » Di, 19.10.2021 20:09

Karolus hat geschrieben: Mo, 18.10.2021 20:42 Hallo

@Craig: es scheint pyautogui hat wirklich das Potential zu vollständigen Überwachung, mglw. sogar dazu:

fiktiver Chat:
Tom: hey Linus wann hast du autogui-script fertig, ich will meine Hausaufgaben machen??
Linus: Ich brauch noch 10 Minuten. Ich schicks in die WA-gruppe.
Chat-Ende

wäre dann irgendwie kontraindiziert. 8)
Damit wollte ich keine Sicherheitsbedenken ausdrücken, sondern nur, daß hier das Werkzeug das gegen Schummeleien der Schüler schützen soll möglicherweise auch noch zum effizienterem Schummeln taugt 8)

Re: Screenshot per Makro

von Karolus » Di, 19.10.2021 18:40

Ich fang mal mit b) an
edit: Das Problem bestand darin das ich pillow während einer laufenden LO-instanz installiert habe, nach einem Neustart von LO tritt das Phänomen auch mit installierter defusedxml nicht mehr auf.
wie gesagt trat der Fehler erst beim Aufruf aus LO heraus auf, dabei wird dann (leider) uno.py in den import-mechanismus involviert, und verheddert sich dann irgendwo. Den Fehler hatte ich auch schon 1-2 mal bei anderer Gelegenheit, und jedesmal stand uno.py am Anfang der Fehlerkette.
Ich halte es für einen Bug in uno.py der aber nicht mal vernünftig reproduzierbar ist.

zu a) pyautogui kann screenshots, tastatur-eingaben und Mausbewegungen aufzeichnen, aber alles muss ja entweder vom Benutzer angestossen werden, oder als systemdienst laufen. Ein (potenzieller) Angreifer der irgendwie Vollzugriff zu deinem Computer erlangt, ist mit Sicherheit nicht auf eine vorhandene pyautogui angewiesen

Re: Screenshot per Makro

von craig22 » Di, 19.10.2021 16:29

Hallo,

@karolus
Wenn ich als Python-Laie es richtig verstehe, scheint es nun Sicherheitsmängel zu geben, wenn man einen Screenshot mittels Python durchführen will:
  1. Code: Alles auswählen

    import pyautogui
  2. Code: Alles auswählen

    > pip3 uninstall defusedxml
a)
Ermöglicht die Überwachung eines Rechners.

b)
Schaltet eine Sicherheitsfunktion in Python aus/ entschärft Python.
Wenn ich es richtig verstehe und recherchiert habe, ist es nun möglich XML-Schadcode auszuführen.

Beides ist nicht erwünscht.

@Alle
Was nun?

Re: Screenshot per Makro

von Stephan » Di, 19.10.2021 15:05

Stephan hat geschrieben: Mo, 18.10.2021 16:18
@Stephan: kannst du an der Stelle das Thema abtrennen, es gibt hier ein paar Fragen die nichts mit "Screenshot per Makro" zu tun haben.
Würde ich tun, aber nun ist ja bereits der Post von Craig dazugekommen. Ich lass den Thread jetzt so wie er ist.
ich habe hier einen Link, auf den Thread hier, gesetzt:
http://de.openoffice.info/viewtopic.php ... 93#p296493


Gruß
Stephan

Nach oben