Screenshot per Makro

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: Screenshot per Makro

Beitrag von craig22 »

Hallo,

lauter Klagelieder :(
Wo ist eine Lösung mittels Python?

@karolus
karolus hat geschrieben:def take_screenshot( ):
Dies erzeugt aber keinen Screenshot!

Gefunden habe ich dieses Script gefunden:
https://www.geeksforgeeks.org/how-to-ta ... ng-python/
Die beschriebenen Pakete habe ich zuvor erfolgreich installiert.

Code: Alles auswählen

# Python program to take
# screenshots
  
  
import numpy as np
import cv2
import pyautogui
   
  
# take screenshot using pyautogui
image = pyautogui.screenshot()
   
# since the pyautogui takes as a 
# PIL(pillow) and in RGB we need to 
# convert it to numpy array and BGR 
# so we can write it to the disk
image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
   
# writing it to the disk using opencv
cv2.imwrite("screenshot.png", image)
Fehlermeldung: hat geschrieben:Der Befehl "." ist entweder falsch geschrieben oder konnte nicht gefunden werden.

(program exited with code: 9009)
Drücken Sie eine beliebige Taste . . .
Dann habe ich den Dateinamen geändert und .png entfernt:

Code: Alles auswählen

cv2.imwrite("screenshot", image)
Ergebnis:
Das Programm lief ohne Fehlermeldung durch, es wurde aber keine Datei namens:
  • Screenshot
  • Screenshot.png
  • Screenshot.(?)
auf meiner Festplatte gespeichert.

Wo liegt nun der Fehler?

Nachtrag
Kurz und knackig:

Code: Alles auswählen

# https://www.simplifiedpython.net/python-screenshot/
import pyautogui
screenshot = pyautogui.screenshot()
screenshot.save("Banane.png")

Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Screenshot per Makro

Beitrag von Stephan »

@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.


Gruß
Stephan
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Screenshot per Makro

Beitrag von Karolus »

@Craig: Ok.

zunächst mal ein Entwurf direkt aus jupyter notebook

Code: Alles auswählen

from PIL import ImageGrab

bbox = (300, 400, 1500, 800)

im = ImageGrab.grab(bbox)
im.save('/home/pi/screenshot.png')
im
im notebook wird mir dann auch der screenshot im screenshot im …usw. gezeigt:
screenshot.png
screenshot.png (51.39 KiB) 2603 mal betrachtet
alles super…

und jetzt das janze als Funktion die (auch) per Tastenkürzel aus LO aufgrufen werden kann…

Code: Alles auswählen

from PIL import ImageGrab

def grab_screen(*_):

    bbox = (300, 400, 1500, 800)
    im = ImageGrab.grab(bbox)
    im.save('/home/pi/screenshot_from_lo.png')
    
und …##Scheisse## … beim Aufruf der Funktion grätscht mir uno.py von der Seite rein, und verhindert mit seinen Sonderlocken den richtigen Import der nötigen Bibliotheken.

edit: nachdem ich:

Code: Alles auswählen

> pip3 uninstall defusedxml
ausgeführt habe tuts der Funktionaufruf aus LO heraus, beispielhaft aus writer:
screenshot_from_lo.png
screenshot_from_lo.png (118.54 KiB) 2598 mal betrachtet
Zuletzt geändert von Karolus am Mo, 18.10.2021 20:46, insgesamt 1-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Screenshot per Makro

Beitrag von Karolus »

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)
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Screenshot per Makro

Beitrag von Stephan »

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
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: Screenshot per Makro

Beitrag von craig22 »

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?
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Screenshot per Makro

Beitrag von Karolus »

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
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Screenshot per Makro

Beitrag von Karolus »

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)
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: Screenshot per Makro

Beitrag von craig22 »

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?
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Screenshot per Makro

Beitrag von Hiker »

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
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Screenshot per Makro

Beitrag von Hiker »

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
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: Screenshot per Makro

Beitrag von craig22 »

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?
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Screenshot per Makro

Beitrag von Stephan »

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
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Screenshot per Makro

Beitrag von Hiker »

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.
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Screenshot per Makro

Beitrag von Karolus »

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??
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Antworten