Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
8 / 8 / 0
Регистрация: 17.10.2012
Сообщений: 58

Буфер обмена, как отслеживать обновления?

24.01.2014, 22:21. Показов 3815. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу утилитку для себя, программа должна сохранять всю историю буфера обмена.
Всё, что я копирую (CTRL+C или мышкой), я хочу сохранять в файл.

Как слушать буфер?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.01.2014, 22:21
Ответы с готовыми решениями:

Как реализовать функцию копирования в буфер обмена и вставку например в Notepad или Word?
Имеется текстовый редактор на Java.Как реализовать функцию копирования в буфер обмена и вставку например в Notepad или Word. Заранее...

Как очистить буфер обмена?
вот собственно и весь вопрос Заранее спасибо

Как отловить буфер обмена!?
Как мне сделать так чтобы программа, если она запущена, каждую секудну смотрела есть ли в буфере текст, желательно не просто текст, а...

7
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
24.01.2014, 22:30

Не по теме:

Цитата Сообщение от helloMatz Посмотреть сообщение
Как слушать буфер?
в наушниках, наверное, чтобы никому не мешать.. :umnik:



Гугл говорит, что есть стандартные методы.. Например, http://docs.oracle.com/javase/... board.html и http://docs.oracle.com/javase/... lipboard()
1
любитель покушать
 Аватар для Севак
687 / 641 / 248
Регистрация: 25.09.2011
Сообщений: 1,313
24.01.2014, 22:45
helloMatz,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.sevak_avet.Test;
 
import java.util.HashMap;
import java.util.Map;
 
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.Clipboard;
import javafx.scene.input.DataFormat;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.stage.Stage;
 
public class FXApp extends Application {
    private static Clipboard clipboard;
 
    @Override
    public void start(Stage stage) throws Exception {
        Group root = new Group();
        Scene scene = new Scene(root, 400, 300);
        clipboard = Clipboard.getSystemClipboard();
 
        scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent event) {
                if (event.isControlDown() && event.getCode() == KeyCode.C) {
                    System.out.println("CTRL + C");
 
                    Map<DataFormat, Object> content = new HashMap<>();
                    content.put(DataFormat.PLAIN_TEXT, "ВСТАВИЛ ТЕКСТ");
 
                    clipboard.setContent(content);
 
                } else if (event.isControlDown()
                        && event.getCode() == KeyCode.V) {
                    System.out.println("CTRL + V");
                    System.out.println(clipboard.getString());
                }
            }
        });
 
        stage.setScene(scene);
        stage.show();
    }
 
    public static void main(String[] args) {
        launch(args);
    }
}
Добавлено через 1 минуту
но учтите, что "слушать" ваши действия в фоне будет весьма затруднительно
1
8 / 8 / 0
Регистрация: 17.10.2012
Сообщений: 58
24.01.2014, 23:10  [ТС]
Эта штука работает раз через раз, при копировании маленьких строк слушатель вообще не вызывается.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.awt.HeadlessException;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.FlavorEvent;
import java.awt.datatransfer.FlavorListener;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
 
public class JlipBoard {
 
    public static void main(String[] args) {
        Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
        FlavorListener listener = new FlavorListener() {
            @Override
            public void flavorsChanged(FlavorEvent e) {
                try {
                    String data = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
                    System.out.println(data);
                } catch (HeadlessException | UnsupportedFlavorException | IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } 
            }
        };
        cb.addFlavorListener(listener);
 
    }
 
}
0
любитель покушать
 Аватар для Севак
687 / 641 / 248
Регистрация: 25.09.2011
Сообщений: 1,313
24.01.2014, 23:28
helloMatz, моя или ваша?
0
8 / 8 / 0
Регистрация: 17.10.2012
Сообщений: 58
24.01.2014, 23:51  [ТС]
Моя, вашу не пробовал, не хотелось связываться с JavaFX.
Других вариантов не нашел, пробую ваш.

UPD:
Отлавливает события только внутри сцены. Мне необходима утилита, которая за весь сеанс работы Windows будет копировать все изменения буфера обмена.
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
25.01.2014, 14:53
(абы не соврать), но мне кажется JVM не позволит делать такие вещи, если окно не в фокусе
0
8 / 8 / 0
Регистрация: 17.10.2012
Сообщений: 58
25.01.2014, 15:57  [ТС]
Цитата Сообщение от tankomaz Посмотреть сообщение
(абы не соврать), но мне кажется JVM не позволит делать такие вещи, если окно не в фокусе
Воу

Вот, нашел, рабочее.


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import java.awt.*;
import java.awt.datatransfer.*;
 
class JlipBoard extends Thread implements ClipboardOwner {
    Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();
    boolean bEnough=false;
 
    public void run() {
        Transferable trans = sysClip.getContents(this);
        regainOwnership(trans);
        ///System.out.println("Listening to board...");
        while(true) {
            if(isitEnough())break;
        }
        ///System.out.println("No more Listening...");
    }
 
    public void itisEnough(){
        bEnough=true;
    }
    public void itisNotEnough(){
        bEnough=false;
    }
    boolean isitEnough(){
        return bEnough;
    }
    public void lostOwnership(Clipboard c, Transferable t) {
        try{
            sleep(200);
        }catch(Exception e){
            System.out.println("Exception: "+e);
        }
        try{
            Transferable contents = c.getContents(this); //EXCEPTION
            //processContents(contents);
            regainOwnership(contents);
        }catch(Exception e){e.printStackTrace();}
    }
 
    void processContents(Transferable t) {
        if(isitEnough())return;
        DataFlavor[] flavors=t.getTransferDataFlavors();
        for(int i=flavors.length-1;i>=0;i--){
            try{
                Object o=t.getTransferData(flavors[i]);
                //System.out.println("Flavor "+i+" gives "+o.getClass().getName());
                if(o instanceof String){
                    ///System.out.println("String="+(String)o);
                    System.out.println(((String)o).toLowerCase());
                    break;
                }
            }catch(Exception exp){exp.printStackTrace();}
        }
        ///System.out.println("Processing: ");
    }
 
    void regainOwnership(Transferable t) {
        sysClip.setContents(t, this);
        processContents(t);
    }
 
    public static void main(String[] args) {
        JlipBoard b = new JlipBoard();
        b.itisNotEnough();
        b.start();
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.01.2014, 15:57
Помогаю со студенческими работами здесь

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

Как поместить в буфер обмена
Извиняюсь если не в тот раздел пишу, тут вопрос непосредственно по коду а не по виндос формам Доброго времени суток! Подскажите...

Как скопировать в буфер обмена
Как скопировать в буфер обмена текст из другого окна по нажатию на горячую клавишу IF GetAsyncKeyState($21)&lt;&gt;0 then // если...

Как поместить текст в буфер обмена?
Как поместить текс в буфер обмена? всё что выдаёт гугл - не то, я помню копировал текст при помощи одной строки кода, там толи функция...

Как сохранить буфер обмена в файл?
Здравствуйте, я начинающий программист на Builder C, я решил обратиться к Вам за помощью. Итак, задача такая: у меня есть некий...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru