0

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

我如何观察 TCL/TK 中的剪贴板,以便在有东西出现时处理通知(事件驱动)。

我做了一些研究,但命令after并不完全是我所期待的。

proc observeClipboard {} {

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

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

4

1 回答 1

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被调用时,新应用程序已经请求了剪贴板的所有权,但它还没有所有权,所以我们稍等片刻让它得到它,设置一切等。

另请注意,如果有超过 1 个应用程序这样做,则两个应用程序都会“争夺”剪贴板的所有权,这是一件坏事。

于 2013-08-13T14:44:03.280 回答