2011-12-29 3 views
1

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

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

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

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

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

+1

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

ответ

3

Попробуйте подключить FlavorListener к Clipboard по телефону Clipboard.addFlavorListener.

Смотрите этот SO вопрос, который имеет образец кода и принятый ответ: Is it possible to be informed when clipboard content changes outside of java

Update:

Это не сработало, - как camickr отметил, что срабатывает только тогда, когда DataFlavor изменения. Оказывается, есть два варианта для вас:

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

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

+1

Это только слушает изменение вкуса, а не когда данные копируются в буфер обмена. Так, например, если 3 части текста скопированы в строку, вы не будете уведомлены о последних 2 и, возможно, также о первом, в зависимости от того, какие данные были изначально в буфере обмена. – camickr

+0

Вот что я подумал, но обсуждение под кодом указывает на другое. Я просто запустил этот код ... не повезло. Сейчас я сближаюсь. – Paul

+0

@camickr даже не это .. это как-то не работает с моим тестом. У меня есть два разных символа «A» и «B» в пустой блокноте. Я выделяю «A» и Ctrl-C. Затем я выделяю «B» и Ctrl-C. И я повторяю этот цикл еще пару раз. Как-то программа получает уведомление для первой операции копирования и игнорирует остальные. – Pacerier

Смежные вопросы