# Java Hotkey



## gonorth (1. Jul 2004)

Wie kann ich in Java eine Tastenkombination realisieren, auf die systemweit reagiert wird. Sprich: Nicht nur wenn das Programm bzw. Fenster den Fokus hat.

Ich bräuchte es unter Windows.

Für C++, Visual Basic und Co gibts ja die API´s RegisterHotkey und UnregisterHotkey, aber kann ich diese auch in Java verwenden bzw. gibts etwas gleichwertiges in Java?

Danke


----------



## Stefan1200 (1. Jul 2004)

Soweit ich weiß, sind in Java keine Global Hotkeys nutzbar.

Falls ich mich irren sollte, würde mich die Antwort auch interessieren.


----------



## P3AC3MAK3R (1. Jul 2004)

Ich bezweifle auch, daß das möglich ist, aber falls doch, lasse ich mich natürlich auch gern eines besseren belehren.  :wink:


----------



## goldfis (7. Apr 2005)

Es ist möglich, über JNI! Soviel isch weiss, muss man eine dll datei ins system32 stecken, welche dann als systemweiter KeyListener agiert! Mich würde jedoch au interessiere, wie man sowas realisiert!


----------



## goldfis (7. Apr 2005)

um mich klarer auszudrücken! ICH MUSS UMBEDINGT WISSEN WIE ES FUNKTIONIERT!!! :cry:  SONST KANN ICH MEIN PROJEKT NICHT REALISIEREN!! :lol:


----------



## thE_29 (7. Apr 2005)

Also, man kann Tastenkombinationen festlegen, sodaß ein gewisser Dialog kommt!

Das hat aber mit übersetzen was zum tun und dann hat das Java Fenster wenn man auf der Taskleiste rechtsklick macht, einen zusätzlichen Eintrag!

Für das muss man eine Datei ins ext Verzeichnis stellen, aber wie gesagt, das hat was mit dem Charsetprovider zum tun..

Aber das mit der DLL wäre interessant, wo gibts den die zum Saugen??


----------



## goldfis (7. Apr 2005)

es ist so:

Ich arbeite in einer grösseren Bude. Hier haben wir viele Java Experten, nur leider haben die nicht so viel Zeit um mir all das zu erklären.

Aber einer hat mir zwei dll dateien und ein paar Klassen hinterlassen, mit denen es scheinbar möglich ist! er hat das natürlich alles selbst geschrieben, deshalb denke ich, gibt es dass auch nirgends zu saugen.

Es funktioniert folgendermassen:

zwei dll dateien werden ins system32 kopiert, sie kommunizieren mit dem system und funktionieren als Systemweite KeyListener.

Wird nun ein bestimmter Key gedrückt so merken Sie das und melden es dem im Hintergrund laufendem Programm.

Nur, die dll dateien sind, glaube ich, mit c++ implementiert.

uiuii! ich muss das mal abklären, aber wenn irgendjemand  hier im Forum eine Ahnung davon hat, bitte ich ihn, eine erklärung abzuliefern!

Vielen Dank


----------



## thE_29 (7. Apr 2005)

Das Problem ist ja nicht das abfragen, das ist leicht, sondern wie ich dem Java Programm dann das mitteile, das ein Tastendruck gekommen ist!

Aber der Rest ist easy, machst ein Fenster was net angezeigt wird und sagst RegisterHotKey, etc und das geht dann so!

Nur wie rufe ich eine Java Funktion von der dll auf ist halt die Frage :>


----------



## Roar (7. Apr 2005)

guck mal ob das geht: http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Toolkit.html#addAWTEventListener(java.awt.event.AWTEventListener,%20long)


----------



## thE_29 (7. Apr 2005)

Der Listener geht auch nur wenn das Programm den Focus hat!

Zz habe ich 2 Probleme

1. wenn ich die Dll als exe starte geht alles gut, nur als DLL geht er mir net in die Message_Map (muß ich noch rumspielen)

2. um mit dem Java-Programm interagieren zu können, schicke ich die nachricht mit einen Befehl an das übergebene Fenster => Problem ist das, dass er es dem 1. Fenster mit dem Namen schickt und das wars! Hat man also 2 Fenster mit dem gleichen Namen, so kann er es gegebenenfalls an das falsche schicken ;>


----------



## MPWalGastweilZuFaulZuLogi (12. Jun 2005)

Hi,

was soll uns der Link zur Api sagen? Check ich nicht, auf welche Funktion willst du hinaus? das mit der getEventQue vielleicht?

Ich möchte auch noch was beitragen: Wenn man mit Runtime.getRuntime().exec(..) etwas aufruft, kann man davon glaube ich alle Benutzereingaben überwachen....


----------



## thE_29 (13. Jun 2005)

Aha!

Und wie?


----------



## Roar (13. Jun 2005)

MPWalGastweilZuFaulZuLogi hat gesagt.:
			
		

> Ich möchte auch noch was beitragen: Wenn man mit Runtime.getRuntime().exec(..) etwas aufruft, kann man davon glaube ich alle Benutzereingaben überwachen....



nö, geht nicht. du kannst nur den error/intput/output stream des programms auslesen/beeinflussen/reinschreiben.


----------



## MPW (10. Aug 2005)

ähm, hab' da mal so 'ne Frage:

http://javafaq.nu/article309.html

hab' aber nicht kapiert, ob sich das nur auf Java-Anwendungen oder generll bezieht..


----------



## thE_29 (10. Aug 2005)

Hast dus den schon getestet??


----------



## MPW (10. Aug 2005)

Ja, funzt nur innerhalb von Java....

zumindest bei mir..

Hab' mal noch 'ne andere Idee: Könnte man nicht ein durchsichtiges JFrame über den Desktop(maximiert always on top und co) legen, da alles abfangen auf den gesuchten Hotkey durchsuchen und alles andere über den roboter weitergeben?


----------



## foxintosh (1. Sep 2005)

Hallo!
Wollte mal wissen ob schon jemand ein lösung hat, die funktioniert?

gruss foxintosh


----------



## Roar (1. Sep 2005)

MPW hat gesagt.:
			
		

> Ja, funzt nur innerhalb von Java....
> 
> zumindest bei mir..
> 
> Hab' mal noch 'ne andere Idee: Könnte man nicht ein durchsichtiges JFrame über den Desktop(maximiert always on top und co) legen, da alles abfangen auf den gesuchten Hotkey durchsuchen und alles andere über den roboter weitergeben?



du kannst in java keine durchsichtigen fenster machen... nur mti jni und wenn du dann eh schon jni verwendest, kannst dir auch gleich ne hotkey api suchen....


----------



## Guest (1. Sep 2005)

Roar hat gesagt.:
			
		

> MPW hat gesagt.:
> 
> 
> 
> ...



ähm...da hätte ich interesse, kennst du da eine die auch auf allen gängien OSs verfügbar sind?


----------



## thE_29 (5. Sep 2005)

Auf, Windows könnt ichs sogar hinbiegen das es geht mit der WinAPI und einer DLL, aber in Linux, hab ich keine Ahnung wie das gehn soll...

desweiteren fehlt mir die Zeit dazu..


----------

