G
Guest
Gast
Anmerkung: Mein Problem bezieht sich auf die Windows-Families (Vorzugsweise WinXP) und ich hoffe, dass ist hier alles sehr verständlich, auch wenn das alles fachlich vlt. nicht so korrekt von mir dargestellt wird.
So, ich möchte ein Programm schreiben, welches bemerkt wenn ein Screenshot gemacht wurde. (Also als Windows-Default Alt Gr + Print) und dieses anschließend via. ftp oder http an einen Server transferiert.
Das Problem habe ich beim ersten Schritt, denke, dass das mit dem ftp/http nicht so das Problem wird.
Meine erster Ansatz war: Einfach in regelmäßigen Abständen die Zwischenablage prüfen.
Gucken ob da etwas halbwegs nach Bild aussieht (Bin mit der Semantik der Zwischenablage nicht vertraut, denn wenn da kein weiterer Eintrag wie z.B. Mime/types zu den gespeicherten Werten steht, müsste sich alles als Bild darstellen lassen (Da ja intern alles Binär ist und ich dass dann als Pic eines gewünschten Formats interpretieren lässt [hoffe es ist klar, was ich meine]) Nächster Schritt: Falls ich ein Bild, habe, dann wirds das irgendwie gehasht und der Hash wird in irgend eine Collection eingetragen (Details hier nicht wichtig). Wenn der Eintrag schon exisitiert wird es dabei belassen.
Falls nicht, wird das Bild dann an den Server übertragen.
Probleme:
-Unperformant, da in einem bestimmten Intervall immer wieder die Zwischenablage verarbeitet werden muss, auch wenn sich für mein Szenario nichts neues ergeben hat. Zudem kann es passieren, dass die Zwischenablage voll läuft, und bestehende Einträge überschrieben werden in denen ein neues Bild hätte sein können, bevor das Programm diese wieder neu auswertet. Das Hashen zur Versionierung der Bilder dürfte auch stark unperformant sein, insbesondere bei einer hohen Auflösung.
-Speicherbedarf wächst dynamisch, da die Einträge der "VersionierungsTabelle" ansteigen.
Dem könnte man sich abhelfen, wenn man eine Konstante größe einführt und die letzten Einträge gelöscht werden...
Das sollte aber auch so nicht so stark in´s Gewicht fallen
Zweiter Ansatz (Verfeinert). Ich registriere einen Listener, der mir bescheid gibt, wenn sich etwas in der Zwischenablage geändert hat. Alles andere bleibt beim alten, außer natürlich, dass das Programm nicht ständig die Zwichenablage ohne Grund selber prüfen muss.
Letzter und meiner Meinung nach bester Ansatz:
Mein Program ließt die Tastatursignale mit und liefert dann bei Alt Gr + Print eine entsprechende Ausnahme.
Zudem könnte ich das konstruieren des Screenshots mittels der Klasse Robot selbst vornehmen und könnte mir die ganze Sache mit der Zwischenablage sparen (Intern wird der Screenshot dann natürlich 2mal angefertig [System und einmal mein Programm] was aber unerheblich sein sollte). Auch die Versionierung würde kein Problem mehr darstellen,da ich die Sicherheit habe,dass das jetzige Screenshot das aktuelle ist.
Problem: Wie kann ich die Tastatureingaben mitlesen. Theoretisch sollte das OS ja Schnittstellen dazu bereit stellen.
Und wenn nicht, ist java nicht elementar genug in einer tiefen Instanz direkt mit dem Treiber (whatever) zu kommunizieren oder?
Wie funktionieren denn die herkömmlichen KeyListener, die man auf nen Gui pappen kann?
Das System schickt der JVM nen Signal, dass etwas und was gedrückt wurde und die JVM schaut nach welcher Listener dafür registriert wurde und wie diese dann damit umgehen soll? Wobei das System natürlich auch nur nen Signal schickt wenn die Gui-Elemente des Programms im Fokus des Benutzers liegen....
So, ich möchte ein Programm schreiben, welches bemerkt wenn ein Screenshot gemacht wurde. (Also als Windows-Default Alt Gr + Print) und dieses anschließend via. ftp oder http an einen Server transferiert.
Das Problem habe ich beim ersten Schritt, denke, dass das mit dem ftp/http nicht so das Problem wird.
Meine erster Ansatz war: Einfach in regelmäßigen Abständen die Zwischenablage prüfen.
Gucken ob da etwas halbwegs nach Bild aussieht (Bin mit der Semantik der Zwischenablage nicht vertraut, denn wenn da kein weiterer Eintrag wie z.B. Mime/types zu den gespeicherten Werten steht, müsste sich alles als Bild darstellen lassen (Da ja intern alles Binär ist und ich dass dann als Pic eines gewünschten Formats interpretieren lässt [hoffe es ist klar, was ich meine]) Nächster Schritt: Falls ich ein Bild, habe, dann wirds das irgendwie gehasht und der Hash wird in irgend eine Collection eingetragen (Details hier nicht wichtig). Wenn der Eintrag schon exisitiert wird es dabei belassen.
Falls nicht, wird das Bild dann an den Server übertragen.
Probleme:
-Unperformant, da in einem bestimmten Intervall immer wieder die Zwischenablage verarbeitet werden muss, auch wenn sich für mein Szenario nichts neues ergeben hat. Zudem kann es passieren, dass die Zwischenablage voll läuft, und bestehende Einträge überschrieben werden in denen ein neues Bild hätte sein können, bevor das Programm diese wieder neu auswertet. Das Hashen zur Versionierung der Bilder dürfte auch stark unperformant sein, insbesondere bei einer hohen Auflösung.
-Speicherbedarf wächst dynamisch, da die Einträge der "VersionierungsTabelle" ansteigen.
Dem könnte man sich abhelfen, wenn man eine Konstante größe einführt und die letzten Einträge gelöscht werden...
Das sollte aber auch so nicht so stark in´s Gewicht fallen
Zweiter Ansatz (Verfeinert). Ich registriere einen Listener, der mir bescheid gibt, wenn sich etwas in der Zwischenablage geändert hat. Alles andere bleibt beim alten, außer natürlich, dass das Programm nicht ständig die Zwichenablage ohne Grund selber prüfen muss.
Letzter und meiner Meinung nach bester Ansatz:
Mein Program ließt die Tastatursignale mit und liefert dann bei Alt Gr + Print eine entsprechende Ausnahme.
Zudem könnte ich das konstruieren des Screenshots mittels der Klasse Robot selbst vornehmen und könnte mir die ganze Sache mit der Zwischenablage sparen (Intern wird der Screenshot dann natürlich 2mal angefertig [System und einmal mein Programm] was aber unerheblich sein sollte). Auch die Versionierung würde kein Problem mehr darstellen,da ich die Sicherheit habe,dass das jetzige Screenshot das aktuelle ist.
Problem: Wie kann ich die Tastatureingaben mitlesen. Theoretisch sollte das OS ja Schnittstellen dazu bereit stellen.
Und wenn nicht, ist java nicht elementar genug in einer tiefen Instanz direkt mit dem Treiber (whatever) zu kommunizieren oder?
Wie funktionieren denn die herkömmlichen KeyListener, die man auf nen Gui pappen kann?
Das System schickt der JVM nen Signal, dass etwas und was gedrückt wurde und die JVM schaut nach welcher Listener dafür registriert wurde und wie diese dann damit umgehen soll? Wobei das System natürlich auch nur nen Signal schickt wenn die Gui-Elemente des Programms im Fokus des Benutzers liegen....