C#捕获剪贴板更改,在窗体最小化到托盘时无法工作。

6

我在使用此链接中找到的“Catch Clipboard Events code”时遇到了问题:

Clipboard event C#

只有当窗体保持在前台,而不是最小化到托盘时,代码才能正常工作。但是:如果您添加了一个通知图标并将窗体最小化到托盘,并将showintaskbar设置为false(这样您只在托盘中拥有一个图标),程序将无法捕获任何剪贴板更改..即使您将窗体最大化回来,它也不会再次工作..您必须重新启动程序..

有什么解决此问题的想法吗!?如何在窗体最小化到托盘时也能捕获剪贴板更改!?

非常感谢任何帮助...

谢谢

2个回答

1

如果最小化了,它应该能够工作 - 真正的最小化,或者隐藏。如果您的“最小化”实现涉及销毁窗口,则该句柄无效。并且剪贴板链现在已经断开,无论下游的剪贴板事件监听器是什么...

在其中添加一些调试代码以将this.Handle显示为字符串(例如:“123456”)。将对SetClipboardViewer的调用放置在表单上的单击事件中。单击它,查看数字。最小化,恢复。再次单击。您是否有相同的数字?你应该有。如果没有,则问题就在那里。剪贴板事件必须发送到一个保持存在的窗口。它可以是后台中的隐藏窗口。

-- 克里斯


那么,你试过我的想法了吗?如果是的话,句柄是否保持不变,还是发生了改变? - Chris Thornton
嗨 Chris... 抱歉上个星期我一直不在... 我会尝试一下,但以前我已经尝试过类似的东西了... 使用无形表单的想法很好,我会试一试并告诉你... 再次感谢。 - lebhero
NP - 很高兴你还活着。请告诉我。 - Chris Thornton

1

无论如何,您可以拥有另一个隐藏的窗体,并使用该窗体来接收Windows消息。永远不要关闭/重新创建该窗口。它在启动时打开,保持打开状态,但不可见。这将起作用。

克里斯


嗨Chris..我刚试了你的建议,它有效果了...我不确定,但似乎this.ShowInTaskbar=false;会关闭表单,或者至少在我的情况下句柄会变无效..所以只需最小化到托盘,就可以很好地工作:)再次感谢您的帮助。 - lebhero
太好了!别忘了点赞并接受答案。如果显示句柄 ID 的技巧有帮助,请点赞该回答并让这个回答自生自灭。谢谢。 - Chris Thornton

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