tcl / tk观察剪贴板

时间:2013-08-13 13:59:46

标签: events asynchronous tcl clipboard notify

我想在把什么东西放到剪贴板上时执行一个函数(例如strg + c)。

如何在TCL / TK中观察剪贴板,以便我可以处理通知(如果有事情发生)(事件驱动)。

我做了一些研究,命令after并不是我想要的。

proc observeClipboard {} {

        set lClipboardContent [clipboard get]
        # do something with clipboard content
        after 1000 observeClipboard
}

它没有按预期工作,也不会是事件驱动(更顺畅)的解决方案。

1 个答案:

答案 0 :(得分:2)

最简单的方法可能是始终拥有剪贴板选择 这有几个缺点:你负责剪贴板,一些剪贴板内容可能会丢失,所以这不是防弹。

proc readclip {} {
    after 50 {
        puts [set cnt [clipboard get]]
        clipboard clear
        clipboard append $cnt
        selection own -command readclip -selection CLIPBOARD .
        selection handle . [list string range $cnt]
    }
}
selection own -command readclip -selection CLIPBOARD .

当调用readclip时,新应用程序已经通过剪贴板请求了所有权,但它还没有所有权,所以我们稍等一下让它获取它,设置所有内容等。

另请注意,如果有多个应用程序执行此操作,则两个应用程序都会对剪贴板的所有权进行“争夺”,这是一件坏事。