Screenshot per Makro
Moderator: Moderatoren
-
- ******
- Beiträge: 690
- Registriert: Di, 13.02.2007 17:38
- Wohnort: Büttelborn
Screenshot per Makro
Kann man per Makro einen Screenshot erzeugen?
... und den dann möglicherweise auch noch abspeichern?
... und den dann möglicherweise auch noch abspeichern?
Re: Screenshot per Makro
Hallo,
da man mit der Druck-Taste eine Screenshot in die Zwischenablage kopieren kann,
als auch mittels [ALT]+[DRUCK] ein vordergründiges Fenster kopieren kann, würde ich
es mal mitt einem KeyEvent-Handler versuchen:
https://forum.openoffice.org/en/forum/v ... 20&t=45516
Hier eine Liste der KeyCodes für LibreOffice:
https://api.libreoffice.org/docs/idl/re ... ction.html
https://api.libreoffice.org/docs/idl/re ... _1Key.html
Hier ein Makro um den Screenshot aus der Zwischenablage in ein Writerdokument einzufügen, etc...
da man mit der Druck-Taste eine Screenshot in die Zwischenablage kopieren kann,
als auch mittels [ALT]+[DRUCK] ein vordergründiges Fenster kopieren kann, würde ich
es mal mitt einem KeyEvent-Handler versuchen:
https://forum.openoffice.org/en/forum/v ... 20&t=45516
Hier eine Liste der KeyCodes für LibreOffice:
https://api.libreoffice.org/docs/idl/re ... ction.html
https://api.libreoffice.org/docs/idl/re ... _1Key.html
Hier ein Makro um den Screenshot aus der Zwischenablage in ein Writerdokument einzufügen, etc...
Code: Alles auswählen
REM ***** BASIC *****
Option Explicit
REM ════════════════════════════════════════════════════════════════════════
REM
REM WRITER: Bild aus Zwischenablage einfuegen und Anker-Konstante setzen
REM 1) [Bild einfuegen]
REM ════════════════════════════════════════════════════════════════════════
REM 1)
Sub [Bild einfuegen]
Dim oDoc As Object
Dim oDPage As Object
Dim oShape As Object
Dim oSel as Object
Dim aPoint As New com.sun.star.awt.Point
Dim aSize As New com.sun.star.awt.Size
Dim NewPos As New com.sun.star.awt.Point
Dim nHeight As Long
Dim nWidth As Long
rem ----------------------------------------------------------------------
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
rem BIld aus Zwischenablage einfügen
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
REM Position und Groesse festlegen
REM 1000 = 1cm
aPoint.x = 3000
aPoint.y = 3000
aSize.Width = 5000
aSize.Height = 3000
oDoc=ThisComponent
' markiertes Bild erfassen
oSel=oDoc.currentController.Selection
' xray osel
oShape=oSel.getByIndex(0)
' Die Eigenschaften des Textfeldes festlegen
With oShape
REM Groesse und Position des Textfeldes (Maße siehe weiter oben)
.Size = aSize
.Position = aPoint
REM ---------- Alle Konstanten müssen in Großbuchstaben geschrieben werden -----------------
REM Konstanten für den Umlauf, etc. (TextWrap)
REM NONE → text does not flow around the object.
REM THROUGHT → text flow ignores the object.
REM PARALLEL → text flows to the left and right of the object.
REM DYNAMIC → text flow depends on the situation. The text formatting decides the best way.
REM LEFT → text flows to the left side of the object.
REM RIGHT → text flows to the right side of the object.
' .TextWrap = com.sun.star.text.WrapTextMode.THROUGHT
REM Konstanten für die Verankerung
REM AT_PARAGRAPH → am Absatz
REM AT_PAGE → an der Seite
REM AT_CHARACTER → am Zeichen
REM AS_CHARACTER → als Zeichen
On Error Goto Ende
.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH ' am Absatz
REM ----------------------------------------------------------------------------------------
End With
Ende:
End Sub
Gruß
Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
-
- ******
- Beiträge: 690
- Registriert: Di, 13.02.2007 17:38
- Wohnort: Büttelborn
Re: Screenshot per Makro
Hallo Craig,
möglicherweise bin ich ja wieder mal auf dem falschen Weg, aber mit dem Keyhandler kann ich doch nur überprüfen, welche Taste gedrückt wurde (Da könnte ich stattdessen meine User ja auch einfach auffordern, die "Druck"-Taste zu betätigen (zumindest in Windows)). Der Screenshot soll aber aus dem Programm heraus erzeugt werden. Zur Erklärung: Normalerweise werden die Eingaben und Fehler in meinem Rechentrainer (den kennst du ja) auf einem Tabellenblatt protokolliert. Jetzt habe ich aber für meine Testoption (mit deren Hilfe Tests geschrieben werden können), Dialoge erstellt, mit denen die schriftliche Rechnung nachgestellt wird. Da könnten jetzt ganz Schlaue, das Endergebnis mit dem Taschenrechner berechnen und die Zwischenschritte weglassen. Mein Makro überprüft die Zwischenschritte und im Protokoll stünde dann, dass das richtige Ergebnis eingegeben wurde, die Rechnung aber falsch ist.
Das sieht bei der Multiplikation etwa so aus: Damit dies vom Lehrer nachvollzogen werden kann, wollte ich dann jeweils einen Screenshot erzeugen (Mit der Druck-Taste sind erfahrungsgemäß einige Schülerinnen und Schüler überfordert.
möglicherweise bin ich ja wieder mal auf dem falschen Weg, aber mit dem Keyhandler kann ich doch nur überprüfen, welche Taste gedrückt wurde (Da könnte ich stattdessen meine User ja auch einfach auffordern, die "Druck"-Taste zu betätigen (zumindest in Windows)). Der Screenshot soll aber aus dem Programm heraus erzeugt werden. Zur Erklärung: Normalerweise werden die Eingaben und Fehler in meinem Rechentrainer (den kennst du ja) auf einem Tabellenblatt protokolliert. Jetzt habe ich aber für meine Testoption (mit deren Hilfe Tests geschrieben werden können), Dialoge erstellt, mit denen die schriftliche Rechnung nachgestellt wird. Da könnten jetzt ganz Schlaue, das Endergebnis mit dem Taschenrechner berechnen und die Zwischenschritte weglassen. Mein Makro überprüft die Zwischenschritte und im Protokoll stünde dann, dass das richtige Ergebnis eingegeben wurde, die Rechnung aber falsch ist.
Das sieht bei der Multiplikation etwa so aus: Damit dies vom Lehrer nachvollzogen werden kann, wollte ich dann jeweils einen Screenshot erzeugen (Mit der Druck-Taste sind erfahrungsgemäß einige Schülerinnen und Schüler überfordert.
Re: Screenshot per Makro
Hallo,
mein Gedankengang ist, nicht die Drucktaste per Handler zu prüfen, sondern die Drucktaste, bzw. [ALT]+[Druck] per Makro zu betätigen.
Hierfür habe ich allerdings kein Beispiel parat.
Hätte ich besser beschreiben sollen, sorry.
Also, [Druck] per Makro und dann weiter mit dem [Bild Einfuegen] Makro.
mein Gedankengang ist, nicht die Drucktaste per Handler zu prüfen, sondern die Drucktaste, bzw. [ALT]+[Druck] per Makro zu betätigen.
Hierfür habe ich allerdings kein Beispiel parat.
Hätte ich besser beschreiben sollen, sorry.
Also, [Druck] per Makro und dann weiter mit dem [Bild Einfuegen] Makro.
Gruß
Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
-
- ******
- Beiträge: 690
- Registriert: Di, 13.02.2007 17:38
- Wohnort: Büttelborn
Re: Screenshot per Makro
... ja, zum Beispiel (zumindest unter Windows) - aber wie?mein Gedankengang ist, nicht die Drucktaste per Handler zu prüfen, sondern die Drucktaste, bzw. [ALT]+[Druck] per Makro zu betätigen.
Re: Screenshot per Makro
Hallo,
In der API der Key-Constant-Groups habe ich keinen Hinweis auf die Nutzung der "Druck-Taste" (engl.: PRTSC) gefunden.
So habe ich ersteinmal bei MS nachgesehen, ob man sich ggf. mit der Sendkeys-Methode dem Problem nähern kann.
Ich habe dann ein VBS-Script gefunden, allerdings verweigert WIN 10 hierbei seinen Dienst.
Durch Zufall bin ich darüber gestolpert, das Irfanview eine Kommandozeilen-Steuerung anbietet.
Siehe IrfanView-Hilfe → Kommandozeile.
Damit dies funktioniert muss eine jpg-Datei namens xxnew.jpg im Ordner C:\temp
gespeichert sein, sonst meldet Irfanview einen Fehler.
Es handelt sich hierbei um eine temporäre Datei, welche immer wieder mit einem neuen Screenshot beschrieben wird.
Ich habe in der IrfanView-Hilfe keine Lösung gefunden, um ohne die temporäre Datei zu arbeiten.
Das Resultat ist dies: Da AOO und LiBo mal wieder nicht so richtig wollten, musste ich eine IF-Anweisung uzr Verifizierung des Office-Typs einbauen,
sonst funktioniert das Einfügen des Bildes aus der Zwischenablage nicht oder nur sporadisch.
Das sporadiscche Verhalten ist aber auch von den implementierten WAIT-Anweisungen abhängig.
Man muss der Shell (Windows-Kommandozeile) und Irfanview Zeit zum Speichern geben.
Dies ist wiederum vom verwendeten Rechner, Arbeitsspeicher und der eingesetzten Festplatte abhängig.
Bei mir:
Intel i5
Ram 16 GB
SSD 1,0TB
Ob dies nun eine Lösung ist , weiß ich nicht.
Ggf. hat noch jemand anderes eine Idee?
Ich kann Dir leider keine direkte Lösung anbieten, zumindest nicht mit AOO-/ LibO-Boardmitteln.... ja, zum Beispiel (zumindest unter Windows) - aber wie?
In der API der Key-Constant-Groups habe ich keinen Hinweis auf die Nutzung der "Druck-Taste" (engl.: PRTSC) gefunden.
So habe ich ersteinmal bei MS nachgesehen, ob man sich ggf. mit der Sendkeys-Methode dem Problem nähern kann.
Ich habe dann ein VBS-Script gefunden, allerdings verweigert WIN 10 hierbei seinen Dienst.
Durch Zufall bin ich darüber gestolpert, das Irfanview eine Kommandozeilen-Steuerung anbietet.
Siehe IrfanView-Hilfe → Kommandozeile.
Damit dies funktioniert muss eine jpg-Datei namens xxnew.jpg im Ordner C:\temp
gespeichert sein, sonst meldet Irfanview einen Fehler.
Es handelt sich hierbei um eine temporäre Datei, welche immer wieder mit einem neuen Screenshot beschrieben wird.
Ich habe in der IrfanView-Hilfe keine Lösung gefunden, um ohne die temporäre Datei zu arbeiten.
Das Resultat ist dies: Da AOO und LiBo mal wieder nicht so richtig wollten, musste ich eine IF-Anweisung uzr Verifizierung des Office-Typs einbauen,
sonst funktioniert das Einfügen des Bildes aus der Zwischenablage nicht oder nur sporadisch.
Das sporadiscche Verhalten ist aber auch von den implementierten WAIT-Anweisungen abhängig.
Man muss der Shell (Windows-Kommandozeile) und Irfanview Zeit zum Speichern geben.
Dies ist wiederum vom verwendeten Rechner, Arbeitsspeicher und der eingesetzten Festplatte abhängig.
Bei mir:
Intel i5
Ram 16 GB
SSD 1,0TB
Ob dies nun eine Lösung ist , weiß ich nicht.
Ggf. hat noch jemand anderes eine Idee?
Gruß
Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
-
- ******
- Beiträge: 690
- Registriert: Di, 13.02.2007 17:38
- Wohnort: Büttelborn
Re: Screenshot per Makro
Hallo Craig,
prima, Kompliment, da hast du dich aber wieder mal richtig reingeschafft. Das funktioniert! ... aber wohl auch nur, wenn IrfanView64 auf dem jeweiligen Computer installiert ist und nur unter Windows. Ich glaube, ich werde jetzt im geschilderten Fall einfach eine Nachricht ausgeben, dass der/die Nutzer/in, händisch einen Screenshot erstellen und speichern sollen, falls sie mit dem Punktabzug nicht einverstanden sind. Eigentlich sollten die Kids das auch können, bzw. lernen. Es hätte ja aber sein können, dass es eine einfache und sichere Möglichkeit gegeben hätte die das Gewünschte direkt aus StarBasic hätte erldigen können.
Aber ansonsten ist deine Lösung prima und kann sie vielleicht auf dem heimischen Computer einsetzen.
Pit
prima, Kompliment, da hast du dich aber wieder mal richtig reingeschafft. Das funktioniert! ... aber wohl auch nur, wenn IrfanView64 auf dem jeweiligen Computer installiert ist und nur unter Windows. Ich glaube, ich werde jetzt im geschilderten Fall einfach eine Nachricht ausgeben, dass der/die Nutzer/in, händisch einen Screenshot erstellen und speichern sollen, falls sie mit dem Punktabzug nicht einverstanden sind. Eigentlich sollten die Kids das auch können, bzw. lernen. Es hätte ja aber sein können, dass es eine einfache und sichere Möglichkeit gegeben hätte die das Gewünschte direkt aus StarBasic hätte erldigen können.
Aber ansonsten ist deine Lösung prima und kann sie vielleicht auf dem heimischen Computer einsetzen.
Pit
Re: Screenshot per Makro
Hallo Pit,
danke für das Kompliment.
Ggf. befindet sich in den Tiefen der API eine Möglichkeit Screenshots zu erstellen,
man müsste halt "nur" das vordergründige Frame erfassen und dann fotografieren.
Ich habe dazu mittels XRAY Frames inspiziert, konnte aber keine Methode dazu finden.
Deshalb war mein erste Gedanke, den Key-Event-Handler "zu verbiegen", um damit einen Tastendruck auszulösen.
Hat aber auch nicht funktioniert.
Das liegt sicherlich daran, dass ich kein Profi-Programmierer bin
Python ist hierbei wesentlich mächtiger, dass beherrsche ich nicht.
Ich denke hierbei daran, dass man aus Basic heraus ein Python-Script anstößt, welches dann die Drucktaste simuliert.
https://stackoverflow.com/questions/182 ... on-windows
https://pypi.org/project/keyboard/
oder per Powershell:
https://stackoverflow.com/questions/549 ... -tab-enter
danke für das Kompliment.
Ja, dass wäre auch mein Wunsch, denn ich könnte eine solche Methode auch gebrauchen.Es hätte ja aber sein können, dass es eine einfache und sichere Möglichkeit gegeben hätte die das Gewünschte direkt aus StarBasic hätte erldigen können.
Ggf. befindet sich in den Tiefen der API eine Möglichkeit Screenshots zu erstellen,
man müsste halt "nur" das vordergründige Frame erfassen und dann fotografieren.
Ich habe dazu mittels XRAY Frames inspiziert, konnte aber keine Methode dazu finden.
Deshalb war mein erste Gedanke, den Key-Event-Handler "zu verbiegen", um damit einen Tastendruck auszulösen.
Hat aber auch nicht funktioniert.
Das liegt sicherlich daran, dass ich kein Profi-Programmierer bin

Python ist hierbei wesentlich mächtiger, dass beherrsche ich nicht.
Ich denke hierbei daran, dass man aus Basic heraus ein Python-Script anstößt, welches dann die Drucktaste simuliert.
https://stackoverflow.com/questions/182 ... on-windows
https://pypi.org/project/keyboard/
oder per Powershell:
https://stackoverflow.com/questions/549 ... -tab-enter
Gruß
Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
-
- ******
- Beiträge: 690
- Registriert: Di, 13.02.2007 17:38
- Wohnort: Büttelborn
Re: Screenshot per Makro
Nun ja, das Python Handbuch habe ich schon und eingelesen habe ich mich auch schon. Python gefällt mir gut. Ich möchte jetzt aber meinen Rechentrainer als App entwickeln und bin dabei auf Kotlin gestoßen, damit kann man wohl Apps sowohl für Android als auch für IOS entwickeln. Dafür habe ich jetzt das Python Handbuch zurseite gelegt und mich in Kotlin eingelesen, das scheint mir allerdings bedeutend anspruchsvoller. Mal sehen, wieweit ich das schaffe.
Re: Screenshot per Makro
Am Ende des folgenden Links ist ein Python-script verlinkt. Ich gerade nur nicht sicher, ob PIL/Pillow beim Python in LibreOffice direkt dabei ist.
https://superuser.com/questions/412293/ ... on-desktop
Erstaunlich finde auch auch das im folgenden erwähnte Screenshot.bat
https://superuser.com/questions/75614/t ... 947#943947
https://superuser.com/questions/412293/ ... on-desktop
Erstaunlich finde auch auch das im folgenden erwähnte Screenshot.bat
https://superuser.com/questions/75614/t ... 947#943947
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
-
- ******
- Beiträge: 690
- Registriert: Di, 13.02.2007 17:38
- Wohnort: Büttelborn
Re: Screenshot per Makro
Auch interessant! Jetzt aber wieder eine blöde Frage: Dass Python (ein Compiler?) in OO/LO schon eingebunden ist, habe ich gelesen - kann ich denn einfach Pythoncode in mein Basic Code einbinden?
Re: Screenshot per Makro
Nein das kannst du nicht!
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: Screenshot per Makro
Python wird normalerweise - wie auch BASIC - interpretiert, also zeilenweise abgearbeitet, auch wenn es da heute Mischformen gibt.erikafuchs hat geschrieben: ↑Sa, 16.10.2021 16:19 ...Dass Python (ein Compiler?) in OO/LO schon eingebunden ist, habe ich gelesen - kann ich denn einfach Pythoncode in mein Basic Code einbinden?
Normalerweise: Entweder Basic oder Python. Zusammenarbeit ist möglich aber kompliziert.
J.
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Re: Screenshot per Makro
Ich mache seit einigen Wochen die ersten ernsthafteren Schritte mit Python in einem Datenbankprojekt in Kombination von Python mit StarBasic. Das Python lernen fällt mir schwer, aber die Zusammenarbeit von Python und StarBasic ist eigentlich einfach.
Wenn Du (in Anlehnung an das mit OO/LO mitgelieferte Python-HelloWorld-Beispiel) folgenden Python-Code hast:
und das in der Datei .../user/Scripts/python/ErzeugeWriterDokument.py (im OO/LO-Benutzerverzeichnis) gespeichert hast, kannst Du das von StarBasic aus so aufrufen:
und erhälst ein Dokument, dessen Inhalt teils von Python, teils von StarBasic erzeugt wurde.
Gruß
Stephan
Wenn Du (in Anlehnung an das mit OO/LO mitgelieferte Python-HelloWorld-Beispiel) folgenden Python-Code hast:
Code: Alles auswählen
def erzeuge_writerdoc( ):
desktop = XSCRIPTCONTEXT.getDesktop()
doc = desktop.loadComponentFromURL(
"private:factory/swriter","_blank", 0, () )
text = doc.Text
tRange = text.End
tRange.String = "Hello World (von Python)"
return doc
Code: Alles auswählen
Sub Main
oMasterScriptProviderFactory = createUnoService("com.sun.star.script.provider.MasterScriptProviderFactory")
g_MasterScriptProvider = oMasterScriptProviderFactory.createScriptProvider("")
oScript = g_MasterScriptProvider.getScript("vnd.sun.star.script:ErzeugeWriterDokument.py$erzeuge_writerdoc?language=Python&location=user")
RS_Python = oScript.invoke(Array(),Array(),Array())
cur = RS_Python.text.CreateTextcursor
cur.GotoEnd(False)
cur.String = CHR(13) & "Hello World (von StarBasic)"
End Sub
Gruß
Stephan
Re: Screenshot per Makro
Hallo
Zunächst, habe ich die Frage von @erikafuchs so verstanden, das er BASIC und Python im Quelltext mischen möchte, (etwa so wie das in html mit eingebetteten JavaScript gemacht wird) und das geht eben nicht.
@Stephan:
Das ist jetzt zwar ein interessantes Beispiel - aber da kann|sollte ich mich doch vorher entscheiden ob ich Basic oder Python benutzen will.
Zunächst, habe ich die Frage von @erikafuchs so verstanden, das er BASIC und Python im Quelltext mischen möchte, (etwa so wie das in html mit eingebetteten JavaScript gemacht wird) und das geht eben nicht.
@Stephan:
Das ist jetzt zwar ein interessantes Beispiel - aber da kann|sollte ich mich doch vorher entscheiden ob ich Basic oder Python benutzen will.
ich finde dieses ScriptProvidergewurstel extrem lästig und zudem musst du den aufrufenden Code je nachdem wo (in einem Document oder nicht) der Code lokalisiert ist, (ich meine NICHT die ScriptURI) unterschiedlich schreiben!Stephan hat geschrieben:…aber die Zusammenarbeit von Python und StarBasic ist eigentlich einfach.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)