Как мы получаем уведомление о событиях системного буфера обмена? - PullRequest
1 голос
/ 29 декабря 2011

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

Например, всякий раз, когда пользователь копирует некоторые данные в системный буфер обмена (Ctrl-C и т. Д. ), моя программа должна получить «уведомление» и сериализовать данные буфера обмена в файл.

Я изучил java.awt.datatransfer , но, похоже, нет никакого способа, которым я мог бы подключить обратный вызов к системному событию, когда данные копируются в буфер обмена.

Как мы получаем уведомление о событиях системного буфера обмена?

Это нормально, если решение работает только для Windows, но совместимость с ОС, конечно, является плюсом.

1 Ответ

3 голосов
/ 29 декабря 2011

Попробуйте присоединить FlavorListener к Clipboard, вызвав Clipboard.addFlavorListener.

См. Этот вопрос SO с примером кода и принятым ответом: Можно ли получить информацию, когда содержимое буфера обмена изменяется за пределами java

Обновление:

Это не сработало - как указал camickr, оно срабатывает только при изменении DataFlavor. Похоже, есть два варианта для вас:

  1. Прослушайте WindowEvent с, и когда ваше приложение сфокусируется, проверьте содержимое буфера обмена. Это подойдет, если вам не нужно, чтобы ваше приложение что-то делало с содержимым буфера обмена в фоновом режиме, иными словами, пользователь должен переключиться на ваше приложение с чем-то в буфере обмена.

  2. Следуйте этому примеру и периодически опрашивайте буфер обмена. Очевидно, вы бы проигнорировали специфичные для Mac вещи (и плохую реализацию синглтона), но идея та же самая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...