Prozessorticks/Tastatur überwachen/ -> Wiederholbarkeit?

Status
Nicht offen für weitere Antworten.
T

Tiava

Gast
Servus,

ich bin ja mittlerweile ganz annehmbar in Java, in meiner Ferialpraxis darf ich zwar nichts programmieren, dafür aber diverse Spielchen Testen, was ganz witzig ist. Mir ist dabei die Idee zu einem Testprogramm gekommen, dass den Tester unterstützt. Dieses Programm soll können:

- Überwacht die Tastatur des Computers und protokolliert alle Tastenaktionen (drücken/loslassen) sowie die Mausbewegungen/klickereien, bleibt aber im Hintergrund. Sollte ein Fehler im getesteten Programm auftreten, drückt der Tester eine bestimmte Taste (zB F12) und das Programm tritt in den Vordergrund. Nun kann der Tester eine Fehlermeldung eingeben und das fehlerhafte Programm beenden. Eventuell wäre noch interessant einen automatischen Screenshot machen zu lassen oder so sobald man dann F12 drückt.

- Durch das Protokoll sollte man dann nachvollziehen können warum der Fehler passiert ist.

- Falls nicht, lassen sich per Knopfdruck die protokollierten Aktionen ab einem gesetzten Startpunkt wiederholen, wobei das Programm einfach die Zeiten vom Protokoll verwendet.

- Wenn nötig kann man auch einfach random-aktionen einführen bei dem das Programm sozusagen einen Chaos-Test zu überstehen hat ;)

Soweit die Idee dahinter.

Die Probleme dabei:

- Realzeit ist ja nicht gleich der Programmzeit. Sollte beim zweiten Test ein Programm mehr im Hintergrund laufen läuft das getestete Programm unter Umständen langsamer und der Fehlerfall tritt nicht wieder ein.

- Verschiedene PCs. Ein PC kann schneller als der andere sein, was wieder zu Zeitdifferenzen führt.

Leider ist es nicht möglich, in das zu testende Programm selbst eine Protokolldatei oder ähnliches einzuprogrammieren, die dann die Positionen beschreibt wo man etwas getan hat, weil das ein externes Programm ist. Sonst wärs ja fast zu einfach...

Meine Fragen an euch lauten im Prinzip:

- Ist es möglich das Problem mit der Zeit irgendwie zu umgehen, und wenn ja, wie?
- Gibt es noch mehr Probleme die ich nicht berücksichtigt habe?
- Ist so ein Programm aus eurer Sicht wirklich sinnvoll?

Danke schonmal im Vorraus

Tiava
 
M

Mario_H

Gast
Wie wär's wenn du die (tatsächiche) Laufzeit deines Programms auswertest (so nach dem Motto wie weit hat meine schleife gezählt bis: xyz), die des anderen müsste ja dann etwa analog sein.

Andererseits frag ich mich warum du der Zeit soo eine Bedeutung beimisst..
 
A

AnmeldeBoykottierer

Gast
Tiava hat gesagt.:
- Ist es möglich das Problem mit der Zeit irgendwie zu umgehen, und wenn ja, wie?

Dein Programm kann gar nicht exakt festellen, wann was in dem zu Überwachenden Programm passiert. Ganz einfach unmöglich ist es, wenn du nur eine CPU hast. Dann bekommt dein Prozess immer nur eine Zeitscheibe, die es nutzen kann, wenn das BS denkt es wäre an der Zeit. Wann dein BS das macht, darauf hast du gar keinen Einfluss.

Tiava hat gesagt.:
- Gibt es noch mehr Probleme die ich nicht berücksichtigt habe?

Jede Menge. Ich glaube zwar grob zu verstehen was du mit den Zeiten meinst, aber genau das kannst du gar nicht erreichen. Nehmen wir ein typisches Problem, du hast zwei Threads laufen. Wann welcher von den beiden Rechenzeit bekommt, darauf hast du null einfluss (s. O.). Echt parallel kann auf einer CPU nichts laufen. Das OS schaltet nur so schnell zwischen Prozessen hin und her, dass man das nicht merkt. Ähnliches passiert bei Threads. Und dann ist die Sache, wie filterst du Tastureingabe und Mausereingnisse, wenn nicht das zu überwachende Programm den Eingabefokus hat? Z.B. lass ich gerne Musik im Hintergrund laufen...

Tiava hat gesagt.:
- Ist so ein Programm aus eurer Sicht wirklich sinnvoll?

Sorry, aber meiner Meinung nach nicht. Es ist zwar eine nette Idee, aber wie du schon sagtest, man weiß nicht wo in dem Programm Fehler auftauchen. Es gibt verschiedene Mechanismen den Problemen gezielter zu begegnen.
Das eine sind Unit-Tests. Diese können automatisiert die funktionalität in gewissen kritischen Bereichen testen. Solche Tests sichern vorallem die Funktionalität auch dann, wenn etwas verändert wird (neue Klasse die gleiches Interface implementiert).
Dann gibt es noch logger. Hier kann man ganz gezielt Eingaben und aufrufe mit loggen. Man hat die Zuordnung Wann, Wo, Was gemacht wird.
Aufruf-Stacks, man sieht in welcher Methode es zu einem Fehler kommt
...

Gibt noch ein paar Hilfsmittel, die möglich sind. So etwas wie Unit-Tests gibt es auch voll automatisch für GUIs, die Dinger sind dann aber schon teuer. Jedenfalls denke ich ist der Ansatz nett, nur ist es nicht trivial möglich hieraus eine sinnvolle Implementierung zu erstellen.
Zudem kann eine Tast (z.B. F12) auch in zu testenden Programm eine Funktion besitzen...

Gruß Der Gast der sich nicht im Forum anmelden möchte
 
T

Tiava

Gast
Danke für die raschen Antworten.

Ich hab halt gedacht ich weiß es zwar nicht wie man sowas machen könnte aber es mag ja sein dass es irgendwo ein paar geniale Leute gibt die das wissen. Fragen schadet ja nicht, denk ich mal.

Wenn ihr alle so sicher seid dass das nix werden kann dann lass ich den Gedanken mal lieber fallen. Immerhin wäre das ein nicht allzukleiner Aufwand sowas zu machen (zumindest für mich ^^)

Trotzdem Danke :)

Gruß
Tiava
 
A

AnmeldeBoykottierer

Gast
Leroy42 hat gesagt.:
Grundsätzlich nicht? Religiöse Gründe? Zu faul? Überredbar? Bestechbar? ...

Prinzipien (oder sowas), jedenfalls nicht in diesem Forum. Dazu fehlt es dem noch an viel viel viel zu viel.
Bewunderswert z.B. dass in fast jedem Thread (den ich bisher gelesen haben) solche völlig OT Themen auftauchen, ohne zu sagen dass es OT ist und ohne je wieder zu der eigentlichen Frage zurück zu kommen.
Also im Prinzip Überzeugbar, aber da müsste doch noch einiges passieren.

@Tiava: Wollte dich nicht entmutigen. Ist halt nur wirklich ein schweres Projekt und wenn man es fertig hat und es keiner verwendet, nicht wirklich toll!
 

Kola

Aktives Mitglied
Vielleicht kannst du da mit einem Robot-Object was machen: java.awt.Robot
Schau dir mal die API an.
 
G

Guest

Gast
Robo hilft mir zwar schon ganz schön, aber was erst mal noch wichtiger wär wäre wie man das Programm im Hintergrund laufen lassen kann und trotzdem die Key/Maus-Eingaben bekommt (also ohne Fokus). Irgendwie find ich da nirgends was dazu...
 
A

Anmeldeboykottierer

Gast
Wenn du die Tastendrücke einer fremden Anwendung mitbekommen möchtest, dann kommst du (imho) nicht um einen Hook rum. Diese sind aber sehr plattforspezifisch (unter Windows hättest du hier direkte API aufrufe). Ich denke da wirst du auch unter anderen Systemen es nicht viel leichter haben. Würde wohl eher auf eine native Methode hinauslaufen.
 

byte

Top Contributor
AnmeldeBoykottierer hat gesagt.:
Prinzipien (oder sowas), jedenfalls nicht in diesem Forum. Dazu fehlt es dem noch an viel viel viel zu viel.
Bewunderswert z.B. dass in fast jedem Thread (den ich bisher gelesen haben) solche völlig OT Themen auftauchen, ohne zu sagen dass es OT ist und ohne je wieder zu der eigentlichen Frage zurück zu kommen.
Also im Prinzip Überzeugbar, aber da müsste doch noch einiges passieren.

Mit anderen Worten: Das Forum ist Dir gut genug, um hier zu lesen und zu schreiben, aber zu schlecht, um sich hier anzumelden. Mit welch pilosophischen Fragen sich manche doch zu beschäftigen scheinen. :roll:
 
T

Tiava

Gast
Ich hab von nem Bekannten schonmal was drüber gehört dass es solche "Hooks" gibt aber wo gibts da gute Anleitungen/Erklärungen dazu?

Ich brauch das ganze eh nur für Windows also ist plattformspezifisch nicht so tragisch ;)
 
G

Guest

Gast
Hmm in Java gibts sowas wohl nicht, oder? Soll heißen dass die Virtual Machine alle Tasten abfängt und an das Programm schickt oder so...

Ich check das irgendwie ned, tut mir leid. Is ja Assembler, soweit ich das seh, aber wie hilft mir das für mein Java Programm? Laut Internet-recherche kann ich in Java kein Inline-Assembler machen also könnt ichs ned mal als Funktion einbinden.

Tut mir leid dass ich dumm bin :cry:
 

moormaster

Top Contributor
Anonymous hat gesagt.:
Hmm in Java gibts sowas wohl nicht, oder? Soll heißen dass die Virtual Machine alle Tasten abfängt und an das Programm schickt oder so...

Viel mehr stellt die VM keinen direkten Weg zur Verfügung, diese Hooks im System zu registrieren. Das geht nur, indem man native Bibliotheken einsetzt, welche im Betriebssystem diese Hooks anmelden. Damit geht dir die Plattformunabhängigkeit deines Programms verloren, weil für jedes Betriebssystem die native Bibliothek extra compiliert werden muss. In diesem Fall reicht das bloße neu compilieren nicht mal, da das, was du vorhast, auf den einzelnen Systemen unterschiedlich realisiert werden muss.

Ich check das irgendwie ned, tut mir leid. Is ja Assembler, soweit ich das seh, aber wie hilft mir das für mein Java Programm? Laut Internet-recherche kann ich in Java kein Inline-Assembler machen also könnt ichs ned mal als Funktion einbinden.

Selbst wenn Java Inline-Assembler verstünde, dann auch nur den, der zu der VM gehört und somit würde dieser den gleichen Beschränkungen unterliegen, wie der Java Code auch.
 
A

Anmeldeboykottierer

Gast
Tiava hat gesagt.:
Ich brauch das ganze eh nur für Windows also ist plattformspezifisch nicht so tragisch

Anonymous hat gesagt.:
Ich check das irgendwie ned, tut mir leid. Is ja Assembler, soweit ich das seh...

Tut mir leid dass ich dumm bin

Ach, ist nicht entschuldbar! :wink: Wichtig ist an dem Link nicht wirklich der Quellcode gewesen, du würdest deine Bibliothek nie direkt mit Assember erstellen. Für JNI bietet sich unter Windows schließlich eine DLL an, diese lässt du dir in Ruhe von einem C-Compiler (oder C++) erstellen. Dazu gibt es auch eine (automatisch erzeugte) Header-Datei, die auch die Aufrufkonvention enthält. Hier macht es z.B. einen sehr großen Unterschied ob du pascal, stdCall oder etwas anderes hast.
Selbst wenn du dann Assembler verwenden möchtest, wäre es eher inline-Assembler (und der dann im C-Programm).
Du kannst dir aber auch einfach das PSDK von Windows schnappen (liegt z.B. beim Borland C Compiler bei) und direkt die API Funktionen aufrufen (da steckt dann der gesehene Code hinter), dass ist das was zu ziemlich jeder machen würde :wink:
Die Methoden sind dann eher so etwas wie SetWindowsHookEx mit den entsprechenden Parametern. Es gibt auch zum PSDK dann eine entsprechende Doku (die da weiterhilft). Ansonsten kannst du auch (wirklich komfortabel) bei Microsoft suchen, da hast du online die API mit Beispielen (zumindest teilweise mit Bsp).
Du kämst aber halt nich um JNI rum.
 
G

Guest

Gast
Tiava hat gesagt.:
Danke für die raschen Antworten.

Ich hab halt gedacht ich weiß es zwar nicht wie man sowas machen könnte aber es mag ja sein dass es irgendwo ein paar geniale Leute gibt die das wissen. Fragen schadet ja nicht, denk ich mal.

Wenn ihr alle so sicher seid dass das nix werden kann dann lass ich den Gedanken mal lieber fallen. Immerhin wäre das ein nicht allzukleiner Aufwand sowas zu machen (zumindest für mich ^^)

Trotzdem Danke :)

Gruß
Tiava

Jooo dann mal viel Glück
Gruß Hack/L
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java die Tastatur übernehmen lassen Allgemeine Java-Themen 5
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
M Event Handling Tastatur abfrage Allgemeine Java-Themen 5
S Input/Output Tastatur als Midi-Keyboard Allgemeine Java-Themen 2
C System.in erhält Input von Tastatur. wo wird das festgelegt? Allgemeine Java-Themen 4
M Swing Virtuelle Tastatur mit Accents Allgemeine Java-Themen 9
P Matrix von Tastatur in 2D Array??? Allgemeine Java-Themen 7
D Tastatur Aktion Allgemeine Java-Themen 36
R Java Tastatur überwachung Allgemeine Java-Themen 2
P Tastatur abfrage ohne KeyListener Allgemeine Java-Themen 3
M Tastatur eingabe über Buttons Allgemeine Java-Themen 15
X Motor mit Tastatur ansteuern Allgemeine Java-Themen 5
H tastatur von englisch auf deutsch stellen Allgemeine Java-Themen 3
T Einzelnes Zeichen von der Tastatur einlesen, aber ohne Enter Allgemeine Java-Themen 4
J Java reagiert nicht mehr auf die Tastatur Allgemeine Java-Themen 2
F JavaProgramm mit der Tastatur Steuern Allgemeine Java-Themen 3
G Tastatur abfrage Allgemeine Java-Themen 8
A Listener Tastatur Allgemeine Java-Themen 3
D Suche "virtuelle Tastatur" Allgemeine Java-Themen 3
T Tastatur global abfragen Allgemeine Java-Themen 2
M Tastatur sperren Allgemeine Java-Themen 6
F Tastatur klick klick Allgemeine Java-Themen 5
conan2 Midi: Tastatur-Klavier Allgemeine Java-Themen 2
H Tastatur eingaben verwenden Allgemeine Java-Themen 30
P Virtuelle Tastatur Allgemeine Java-Themen 5
A Serielle Schnittstelle | Barcodescan | ohne Tastatur Allgemeine Java-Themen 11
H Tastatur abhören Allgemeine Java-Themen 8
E Java und Internet überwachen? Allgemeine Java-Themen 4
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
K Batches überwachen und ggf. neustarten Allgemeine Java-Themen 5
D Thread-Array (richtig) überwachen Allgemeine Java-Themen 3
T Update eines Programms - Beenden eines anderen Prozesses überwachen Allgemeine Java-Themen 8
S http POST überwachen Allgemeine Java-Themen 2
P Variablen in einer anderen Klasse auf Änderungen überwachen Allgemeine Java-Themen 12
K Prozess starten, überwachen und beenden Allgemeine Java-Themen 4
G Dateien überwachen und backuppen Allgemeine Java-Themen 5
S File überwachen Allgemeine Java-Themen 8
P Applet Funktionalität überwachen Allgemeine Java-Themen 3
O Windows-Prozesse/ Tasks überwachen Allgemeine Java-Themen 3
G Prozesse überwachen und neustarten Allgemeine Java-Themen 3
K Java einen Port überwachen lassen Allgemeine Java-Themen 5
N Fuhrpark mit GPS und einem Java Programm überwachen Allgemeine Java-Themen 25
T Ordner überwachen Allgemeine Java-Themen 6
D Änderungen an einer lokalen Datei abprüfen/überwachen Allgemeine Java-Themen 4
T Datei geöffnet überwachen! Allgemeine Java-Themen 6
G Verzeichnis überwachen Allgemeine Java-Themen 13
M Thread überwachen / auf Thread-Tod reagieren Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben