监视Mac OS中的剪贴板

3
我需要在我的Mac OS应用程序中监视剪贴板事件。我找到了一个示例clipboard viewer和另一个问题在stackoverflow上寻求同样的东西,但它们都没有解决如何监视剪贴板事件的方法。
也就是说,在用户按下command + c之后,我会收到通知事件。我知道这个功能是存在的,因为有一个应用程序使用了这个功能。
有什么想法吗?

2个回答

2

我已经编写了一个剪贴板监听器[它将打印每个进入剪贴板的新文本信息],使用原生Java实现,代码如下:

import java.awt.Toolkit;  
import java.awt.datatransfer.*;  
import java.io.IOException;  

public class ClipboardListener extends Thread implements ClipboardOwner {

    Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();  

    public void run(){  
        Transferable selection = systemClipboard.getContents(this);  
        gainOwnership(selection);  
        while (true) {}
    }  

    public void gainOwnership(Transferable t){ 
        try {this.sleep(100);} 
        catch (InterruptedException e) {}
        systemClipboard.setContents(t, this);  
    }  

    public void lostOwnership(Clipboard clipboard, Transferable contents) {
        try {System.out.println((String) clipboard.getData(DataFlavor.stringFlavor));} 
        catch (UnsupportedFlavorException e) {} 
        catch (IOException e) {}
        gainOwnership(contents);  
    }  
}

public class myApp {

    public static void main(String[] args){
        ClipboardListener listener = new ClipboardListener();
        listener.start();}
}

它能够工作,但是应用程序需要聚焦才能从剪贴板中获取事件。[我不是Mac OS X开发人员,所以我不知道如何解决这个问题,实际上我已经在这里发布了一个问题...]


0

你看过this吗?你可以监听 command + c (和 x) 并手动获取剪贴板。


2
如果用户从编辑菜单中选择复制,会发生什么? - Alexsander Akers
真的...我不确定是否有办法做到这一点。 - Matt S.
你确定所提到的应用程序支持这个功能吗?它能够监控NSMenu的选择吗? - lbrndnr
@larcus,你是不是想评论这个问题? - Matt S.
什么?我不明白你的意思。 - lbrndnr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接