【发布时间】:2012-04-29 16:17:49
【问题描述】:
我想将更改保存在我的剪贴板中。所以我注册了我的应用程序以获取剪贴板发生的所有更改。
使用
[DllImport("User32.dll")]
protected static extern bool AddClipboardFormatListener(int hwnd);
然后
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_CLIPBOARDUPDATE:
OnClipboardChanged();
break;
...
}
}
private void OnClipboardChanged()
{
if (Clipboard.ContainsText())
{
MessageBox.Show(Clipboard.GetText().ToString());
}
}
问题是: 从 Visual Studio 或 firefox 等应用程序复制文本时,有时会调用 OnClipboardChanged() 函数两次或 3 次。
我认为那些应用程序会以不同的格式将数据写入剪贴板,这就是该函数被多次调用的原因。 但是我如何防止保存相同的数据,因为 OnClipboardChanged() 被多次调用?
【问题讨论】:
-
Message (m) 参数上是否有一个属性对于写入剪贴板的每个实例都相同?也许是身份证?如果是这样,如果您已经处理了该消息/ID,也许您可以忽略该消息?
-
嗨,鲍勃,我找不到任何关于 msg id 或类似的东西..这是一个真正的好主意,如果每个 msg 都有一个“呼叫 id”,那就太好了,谢谢跨度>