Может ли Java видеть активность моей клавиатуры? - PullRequest
2 голосов
/ 30 января 2010

Я хотел бы написать программу, которая может отслеживать активность моей клавиатуры. Более подробно, Java-программа должна «видеть», какая клавиша нажата / отпущена и когда. Вся эта информация должна храниться в заданном файле.

Прежде всего, я хотел бы знать, возможно ли это сделать с помощью Java. Я знаю, что это возможно, если я наберу текстовое поле, созданное программой Java. Но возможно ли для Java отслеживать активность клавиатуры, если я наберу, скажем, в текстовом поле браузера или, например, в текстовом (или открытом офисе) документе?

Ответы [ 6 ]

4 голосов
/ 30 января 2010

Эти события направлены в окно, которое имеет фокус, из всех событий на рабочем столе вы можете получить только положение мыши.

import java.awt.MouseInfo;


    public class Mouse {
        public static void main(String[] args) {
            while ( true ) {
                System.out.println( MouseInfo.getPointerInfo().getLocation() );
            }
        }
    }

Для захвата системы sysem (что вам нужно для слова) вам нужно включить нативную библиотеку

Пример кода для windows: Родная клавиатура и мышь

3 голосов
/ 31 июля 2013

Забудьте JNI и JNA.

В настоящее время существует новая библиотека для встроенного доступа мыши и клавиатуры, которая работает точно так же, как MouseXxxListener и KeyListener. Другими словами, это знакомый интерфейс, поэтому вам не нужно изучать ничего нового (кроме того, как вы связываете внешнюю библиотеку).

https://code.google.com/p/jnativehook/

2 голосов
/ 09 декабря 2010

Забудь JNI

JNA - это решение (основано на JNI, но это намного проще, хотя большинство людей не используют его, думая, что это так же сложно, как JNI, но это не так)

Чек https://github.com/twall/jna/ и особенно в середине страницы, где написано: Платформа / Платформа Документация

Если вы скачаете platform.jar (и проверите исходный код), вы найдете обертку вокруг User32.dll, где вы можете найти функцию win32 GetAsyncKeyState(int vKey)

сопоставлен с соответствующей функцией Java

(см. H ** ps: //jna.dev.java.net/javadoc/platform/com/sun/jna/platform/win32/User32.html)

Там вы можете проверить состояние клавиши (нажатой или отпущенной)

Если вам нужен слушатель глобального ключа, взгляните на мой другой ответ:

h**p://stackoverflow.com/questions/696170/java-keylistener-without-window-being-open/4394398

Благодаря Stackoverflow я не могу публиковать более одной рабочей ссылки в своих ответах: (

Приветствия

1 голос
/ 30 января 2010

Вероятно, можно написать регистратор ключей на основе Java с использованием некоторых собственных библиотек, хотя имейте в виду, что такая программа, вероятно, более заметна, чем программа с другой технологией, поскольку для ее работы должна быть запущена Java VM , Имейте это в виду, если вы пытаетесь быть тайным.

Кроме того, если вам просто нужна такая программа для использования, а у нет для ее самостоятельной разработки, существует множество аппаратных и программных систем хранения ключей, которые вы можете использовать вместо этого.

0 голосов
/ 30 января 2010

То, что вы запрашиваете, невозможно с помощью Java API. Для ведения регистрации по общесистемному ключу вам необходимо зарегистрироваться с помощью перехватчиков win32 (или других собственных ОС). В частности, это будет сделано с использованием собственных библиотек и взаимодействия с JNI.

Есть некоторые фрагменты кода на http://forums.sun.com/thread.jspa?messageID=3808163#3808163. Это хороший пример того, как начать работу с JNI и зарегистрировать обратный вызов Java для ловушки win32.

0 голосов
/ 30 января 2010

Я думаю, что нативные функции могут это сделать. Это что-то вроде соединения c ++ с Java.

http://en.wikipedia.org/wiki/Java_Native_Interface

...