Frage

Ich arbeite eine On-Screen-Tastatur mit Java zu entwickeln. Diese Tastatur verfügt über eine JComponent für jeden möglichen Schlüssel. Wenn eine Maus nach unten auf die Schaltfläche erkannt wird, möchte ich noch auf einen bestimmten Fokus Tastaturcode an die Anwendung senden. Die Tastatur selbst ist innerhalb eines JFrame ohne Dekorationen und auf always-on-top.

Ich fand, dass die Roboter-Klasse verwendet werden kann, um diese Tastaturereignisse auf der nativen Warteschlange zu simulieren. Doch in diesem Fall bedeutet die JComponent Auswahl würde, dass der Tastendruck auf dem JFrame empfangen wird, und ich würde nicht in der Lage sein, es in der anderen Anwendung erhalten

Wie kann ich meine Tastatur auf dem Bildschirm „Always-ohne-Fokus“? Ist es vielleicht möglich, ein anderen Ansatz zu verwenden, um den Tastendruck senden?

War es hilfreich?

Lösung 3

Anscheinend ist der einzige Weg, dies zu tun, ist eine JNI-Schicht zu haben, die die Umwandlung von Java zu nativen machen. Java hat keine einfache Möglichkeit, solche funcionality zu liefern.

Dies könnte ein interessantes Konzept für eine kleine, Dritte Bibliothek für jemanden, den JNI ...

lernen will

Andere Tipps

Ich fand jnativehook , wenn ich eine gamebot mit tatsächlichen Tastatur- und Mausbefehle zu steuern versuchte (genauer "human-like").

Die einzige Lösung, die ich bisher finden konnte, ist jede Taste eines JComponent zu machen (so kann es nicht den Fokus hat), und legen Sie die folgenden Eigenschaften auf dem JFrame:

    setUndecorated(true);
    setFocusableWindowState(false);
    setFocusable(false);
    enableInputMethods(false);

Nun, wenn die Roboter-Klasse I kann durch Klicken auf den Tasten Ereignisse zu jedem aktiven Fenster senden. Die einzige Einschränkung ist, dass es nur für Windows zu funktionieren scheint, die zu derselben virtuellen Maschine gehören, und es funktioniert nicht mit jedem anderen System-Fenster.

Sie haben nativen SetFocus () oder SetActiveWindow () Funktionen aufzurufen versucht Fokus zu bewegen, bevor Sie Roboter-Klasse verwenden?

Ich bin mir nicht bewusst irgendeine Weise dieses unabhängige Art und Weise in OS zu tun. Ich weiß nicht, über Windows, aber es wäre möglich, Gespräch mit X-Server über das X-Protokoll.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top