Hi, ich bin neu hier und hab von AHK keine richtige Ahnung. Programmieren kann ich auch nicht wirklich
Aber ich schaffe es mit trial'n error meist, vorhandene Beispiele so einigermaßen zu verstehen und anzupassen.
Was will ich erreichen: Ich habe ein Programm, das mir diverse Statusinfos eines Fotodruckers in einem Fenster anzeigt. Einige diese Infos möchte ich gerne auslesen und in eine Textdatei schreiben.
Das ist einmal die verbleibende Papiermenge und dann der Status des Druckers (warten, Drucken, Fehler etc).
Ich würde diese werte gerne in einem gewissen Intervall (60 Sekunden) auslesen. Der neue Wert soll den alten im Logfile überschreiben.
Mit Winspy habe ich die Class und ClassNN des jeweiligen Bereichs ermittelt, der ausgelesen werden soll. Kann mir jemand ein Beispielskript oder zumindest das Gerüst für solch einen Task schicken?
Vielen Dank schonmal im Voraus!
Skript, das den Inhalt eines Fensters ausliest
Moderator: jNizM
-
- Posts: 17
- Joined: 08 Jan 2018, 09:54
Re: Skript, das den Inhalt eines Fensters ausliest
Die etwas 'professionellere' methode wäre das abgreifen solcher infos über den treiber. Dazu gibt es schon einige brauchbare scripte im (mutter)form.
Das abfragen im interval würde mittels SetTimer-routine bewerkstelligt.
Das abfragen im interval würde mittels SetTimer-routine bewerkstelligt.
-
- Posts: 17
- Joined: 08 Jan 2018, 09:54
Re: Skript, das den Inhalt eines Fensters ausliest
Das wäre natürlich toll, ich bezweifle aber, dass es für diesen Drucker etwas gibt, ist ein Thermosublimationsdrucker von DNP, der DS-RX1.
Meine umfassende Recherche im Netz hat zumindest ergeben, dass man diese Werte nicht einfach so an anderer Stelle abgreifen kann. Aber ich lasse mich gern eine Besseren belehren...
Meine umfassende Recherche im Netz hat zumindest ergeben, dass man diese Werte nicht einfach so an anderer Stelle abgreifen kann. Aber ich lasse mich gern eine Besseren belehren...
Re: Skript, das den Inhalt eines Fensters ausliest
Moin,
es wäre hilfreich, wenn Du uns die per WinSpy ermittelten Daten der für Dich interessanten Controls und eine Beschreibung / Beispiel des jeweiligen Inhalts zur Verfügung stellen könntest. Wenn Du die Daten alle 60 Sekunden aus einem Programmfenster abgreifen willst, muss das Programm auch alle 60 Sekunden zumindest für kurze Zeit laufen. Willst Du das wirklich so?
es wäre hilfreich, wenn Du uns die per WinSpy ermittelten Daten der für Dich interessanten Controls und eine Beschreibung / Beispiel des jeweiligen Inhalts zur Verfügung stellen könntest. Wenn Du die Daten alle 60 Sekunden aus einem Programmfenster abgreifen willst, muss das Programm auch alle 60 Sekunden zumindest für kurze Zeit laufen. Willst Du das wirklich so?
-
- Posts: 17
- Joined: 08 Jan 2018, 09:54
Re: Skript, das den Inhalt eines Fensters ausliest
Ja, das Fenster soll permanent offen sein. Vielleicht funktioniert es auch, wenn es minimiert ist, das wäre aber nicht so wichtig. Ich mache nachher mal einen Screenshot und poste die Classes aus Winspy. THX!
-
- Posts: 17
- Joined: 08 Jan 2018, 09:54
Re: Skript, das den Inhalt eines Fensters ausliest
Hier ist der Screenshot. Ich habe die relevanten Bereiche eingefärbt. Ich hoffe, das hilft als Info weiter?
gelber Bereich:
Handle: 0x3063C
Class: WindowsForms10.STATIC.app.0.378734a
ClassNN: WindowsForms10.STATIC.app.0.378734a16
roter Bereich:
Handle: 0x20644
Class: WindowsForms10.EDIT.app.0.378734a
ClassNN: WindowsForms10.EDIT.app.0.378734a1
gelber Bereich:
Handle: 0x3063C
Class: WindowsForms10.STATIC.app.0.378734a
ClassNN: WindowsForms10.STATIC.app.0.378734a16
roter Bereich:
Handle: 0x20644
Class: WindowsForms10.EDIT.app.0.378734a
ClassNN: WindowsForms10.EDIT.app.0.378734a1
Re: Skript, das den Inhalt eines Fensters ausliest
Moin,
danke für die Info. Du kannst mal Folgendes probieren:
Starte das Statusprogramm und anschließend folgendes (ungetestetes) Skript:
Wenn Du dann den Hotkey Strg+Shift+a auslöst und die richtigen Daten ausgegeben werden, bist Du auf dem richtigen Weg.
Übrigens: Muss bei ständig offenem Fenster der Button Aktualisieren gedrückt werden, damit die Werte neu eingelesen werden?
danke für die Info. Du kannst mal Folgendes probieren:
Starte das Statusprogramm und anschließend folgendes (ungetestetes) Skript:
Code: Select all
#NoEnv
WinTitle := "RXI Information"
^+a:: ; Hotkey Strg+Shift+a -> Werte auslesen
If !WinExist(WinTitle) ; bei Erfolg wird das 'Zuletzt Gefundene Fenster' gesetzt -> https://ahkde.github.io/docs/misc/WinTitle.htm
{
MsgBox, 16, Test, Das Fenster %WinTitle% wurde nicht gefunden! ; der Fenstertitel stimmt offensichtlich nicht
Return
}
ControlGetText, Gedruckt, WindowsForms10.STATIC.app.0.378734a16
ControlGetText, Status, WindowsForms10.EDIT.app.0.378734a1
MsgBox, 0, Ergebnis:`nBlattzähler: %Gedruckt%`nDruckerstatus: %Status%
Return
Übrigens: Muss bei ständig offenem Fenster der Button Aktualisieren gedrückt werden, damit die Werte neu eingelesen werden?
-
- Posts: 17
- Joined: 08 Jan 2018, 09:54
Re: Skript, das den Inhalt eines Fensters ausliest
@just me, das funktioniert, vielen Dank dafür!
Ich versuch dann mal, mich durchzuwurschteln bezüglich Ausgabe in ein Logfile etc...
Und Nein, der Wert wird automatisch aktualisiert
Ich versuch dann mal, mich durchzuwurschteln bezüglich Ausgabe in ein Logfile etc...
Und Nein, der Wert wird automatisch aktualisiert
-
- Posts: 17
- Joined: 08 Jan 2018, 09:54
Re: Skript, das den Inhalt eines Fensters ausliest
So, das Skript läuft jetzt soweit.
Was nicht funktioniert, ist das Schreiben in die Datei im Else-Teil, also wenn das Fenster nicht gefunden wurde.
Es hat schon funktioniert, jetzt plötzlich nicht mehr. Und ich finde nicht raus, was ich geändert habe:think:
Darüber hinaus die Frage: ist es möglich, den Inhalt auszulesen, wenn das Fenster minimiert ist?
Edit: Nevermind, hab's gefunden:
Ich liebe AHK!
Was nicht funktioniert, ist das Schreiben in die Datei im Else-Teil, also wenn das Fenster nicht gefunden wurde.
Es hat schon funktioniert, jetzt plötzlich nicht mehr. Und ich finde nicht raus, was ich geändert habe:think:
Code: Select all
#NoEnv
#persistent
SetTimer, Statusauslesen, 10000
Return
Statusauslesen:
WinTitle := "RX1 Information"
If !WinExist(WinTitle) ; bei Erfolg wird das 'Zuletzt Gefundene Fenster' gesetzt -> https://ahkde.github.io/docs/misc/WinTitle.htm
{
FileDelete, Druckerstatus.txt
FileAppend,--- `nRX1-Tool nicht aktiv, Druckerstatus.txt
}
ControlGetText, Rest, WindowsForms10.STATIC.app.0.378734a16
ControlGetText, Status, WindowsForms10.EDIT.app.0.378734a1
FileDelete, Druckerstatus.txt
FileAppend, %Rest% `n%Status%, Druckerstatus.txt
Return
Edit: Nevermind, hab's gefunden:
Code: Select all
DetectHiddenWindows, On
Re: Skript, das den Inhalt eines Fensters ausliest
Ich sehe kein else, damit würde die section nach dem if grundsätzlich ausgeführt, überschreibt also das if-gedöns (?)
!Winexist() <> WinExist()
!Winexist() <> WinExist()
Re: Skript, das den Inhalt eines Fensters ausliest
Moin,
BoBo hat recht. Und in meinem Beispiel war das
SetTimer, Statusauslesen, 10000 started den Timer alle 10 Sekunden. Der Timer hinterlässt dann genau eine Zeile in der Statusdatei. Mir erschleßt sich der Sinn bisher nicht.
BoBo hat recht. Und in meinem Beispiel war das
Code: Select all
If !WinExist(WinTitle) ; bei Erfolg wird das 'Zuletzt Gefundene Fenster' gesetzt -> https://ahkde.github.io/docs/misc/WinTitle.htm
{
MsgBox, 16, Test, Das Fenster %WinTitle% wurde nicht gefunden! ; der Fenstertitel stimmt offensichtlich nicht
Return ; <<<<<
}
-
- Posts: 17
- Joined: 08 Jan 2018, 09:54
Re: Skript, das den Inhalt eines Fensters ausliest
Das kommt davon, wenn man keine rechte Ahnung vom Coden hat, jetzt funktioniert es wieder, danke!
Der Sinn ist der folgende:
Das Skript liest alle 10 Sekunden die Werte aus und schreibt sie in eine Textdatei. Diese Textdatei wird von einem Powershell-Skript ausgelesen, das diese Werte in eine sqlite-Datenbank schreibt. Und ich kann dann auf einem Webinterface ablesen, wie der Status des Drucker ist und wieviele Bilder noch gedruckt werden können.
Der Sinn ist der folgende:
Das Skript liest alle 10 Sekunden die Werte aus und schreibt sie in eine Textdatei. Diese Textdatei wird von einem Powershell-Skript ausgelesen, das diese Werte in eine sqlite-Datenbank schreibt. Und ich kann dann auf einem Webinterface ablesen, wie der Status des Drucker ist und wieviele Bilder noch gedruckt werden können.
Re: Skript, das den Inhalt eines Fensters ausliest
FYI. Du kannst mit AHK auch direkt die sqlite-datenbank beschreiben.
-
- Posts: 17
- Joined: 08 Jan 2018, 09:54
Re: Skript, das den Inhalt eines Fensters ausliest
Das dachte ich mir schon, AHK kann ja scheinbar alles.
Aber das Skript macht noch mehr Sachen und existiert auch schon. Da ist dieser Umweg vermutlich einfacher.
Aber das Skript macht noch mehr Sachen und existiert auch schon. Da ist dieser Umweg vermutlich einfacher.
Re: Skript, das den Inhalt eines Fensters ausliest
Falls du an das PS rankommst, ließe sich mal schaun ob das alles in gänze mit AHK machbar ist. Erspart eine schnittstelle - denn jede zusätzliche birgt ein potentielles (laufzeit)risiko (oder sei es, das der PS-guru in eurem laden im lotto gewinnt ).
... Erm, und außerdem - AFAIK läßt sich ein PS-script sogar direkt in AHKcode einbetten
... Erm, und außerdem - AFAIK läßt sich ein PS-script sogar direkt in AHKcode einbetten
-
- Posts: 17
- Joined: 08 Jan 2018, 09:54
Re: Skript, das den Inhalt eines Fensters ausliest
@BoBo, danke für das Input! Da kümmert sich dann das Zukunfts-ich drum
Du hast natürlich recht, wäre besser wenn alles aus einem Guss ist...
Du hast natürlich recht, wäre besser wenn alles aus einem Guss ist...
-
- Posts: 17
- Joined: 08 Jan 2018, 09:54
Re: Skript, das den Inhalt eines Fensters ausliest
Die letzten 4 Jahre lief das Skript ohne Probleme und ich bin immer noch begeistert. Nun möchte ich gern die Infos aus einem anderen Druckermodell auslesen. Sieht im Prinzip gleich aus, ist aber scheinbar eine andere Art von Fenster.
ich benötige die Werte aus Screenshot1 und Screenshot2
Das Skript so anzupassen hat nicht funktioniert:
Hat jemand eine Idee?
ich benötige die Werte aus Screenshot1 und Screenshot2
Das Skript so anzupassen hat nicht funktioniert:
Code: Select all
#NoEnv
#persistent
Menu, Tray, Icon, tray.ico ; spezielles icon benutzen (muss im gleichen Ordner liegen)
SetTimer, Statusauslesen, 30000 ; Ausführen des Bereiches "Statusauslesen", Intervall in ms, 60sec=60000
return
Statusauslesen:
WinTitle := "Druckeinstellungen für DP-DS620"
If !WinExist(WinTitle) ; Solange das Fenster nicht existiert, wird eine Fehlermeldung in die Druckerstatus-Datei geschrieben
{
FileDelete,D:\statustool\Druckerstatus.txt
FileAppend,---`nRX1-Tool nicht aktiv,D:\statustool\Druckerstatus.txt
psScript := "D:\statustool\fa-status.ps1"
Run, powershell.exe "%psScript%",, hide
Return
}
; Wenn das Fenster existiert, werden die Werte ausgelesen und in die Druckerstatus-Datei geschrieben
ControlGetText, Rest, Static2
ControlGetText, Status, Edit1
FileDelete,D:\statustool\Druckerstatus.txt
FileAppend,%Rest%`n%Status%,D:\statustool\Druckerstatus.txt
psScript := "D:\statustool\fa-status.ps1"
Run, powershell.exe "%psScript%" ,, hide
Return
- Attachments
-
- Screenshot2.JPG (89.51 KiB) Viewed 1434 times
-
- screenshot1.JPG (89.35 KiB) Viewed 1434 times
Re: Skript, das den Inhalt eines Fensters ausliest
Nur so ein Verdacht…
ControlGetText, Rest, Static2
ControlGetText, Status, Edit1
vs.
ControlGetText, Rest, ahk_class Static2
ControlGetText, Status, ahk_class Edit1
ControlGetText, Rest, Static2
ControlGetText, Status, Edit1
vs.
ControlGetText, Rest, ahk_class Static2
ControlGetText, Status, ahk_class Edit1
-
- Posts: 17
- Joined: 08 Jan 2018, 09:54
Re: Skript, das den Inhalt eines Fensters ausliest
Das war's leider nicht
Re: Skript, das den Inhalt eines Fensters ausliest
Moin,
das Fenster 'Druckeinstellungen ..." hat mehrere Tabs. Bist Du sicher, dass immer der richtige Tab aktiv ist?
Ansonsten könntest Du noch versuchen, Dein Skript als Admin auszuführen.
das Fenster 'Druckeinstellungen ..." hat mehrere Tabs. Bist Du sicher, dass immer der richtige Tab aktiv ist?
Ansonsten könntest Du noch versuchen, Dein Skript als Admin auszuführen.
Who is online
Users browsing this forum: No registered users and 56 guests