我想在把什么东西放到剪贴板上时执行一个函数(例如strg + c)。
如何在TCL / TK中观察剪贴板,以便我可以处理通知(如果有事情发生)(事件驱动)。
我做了一些研究,命令after
并不是我想要的。
proc observeClipboard {} {
set lClipboardContent [clipboard get]
# do something with clipboard content
after 1000 observeClipboard
}
它没有按预期工作,也不会是事件驱动(更顺畅)的解决方案。
答案 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
时,新应用程序已经通过剪贴板请求了所有权,但它还没有所有权,所以我们稍等一下让它获取它,设置所有内容等。
另请注意,如果有多个应用程序执行此操作,则两个应用程序都会对剪贴板的所有权进行“争夺”,这是一件坏事。