在C#中的 winform 应用程序中,当Windows剪贴板内容发生变化时,我正在使用此代码执行某些操作。
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool AddClipboardFormatListener(IntPtr hwnd);
private const int WmClipboardupdate = 0x031D;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg != WmClipboardupdate) return;
richText.Paste();
}
现在,当我从Microsoft Word
复制一些文字时,它运行正常。但问题是当我关闭Word application
时,它仍然会调用更改事件3次,并且剪贴板中的文本会粘贴到我的RichTextBox或我使用剪贴板内容的任何位置。
有没有人知道如何防止这种情况?
答案 0 :(得分:0)
删除你的监听器以停止接收事件。
RemoveClipboardFormatListener(hwnd);
你怎么知道一个不相关的申请何时开放?
private bool IsWordFileOpened()
{
bool isExist = false;
System.Diagnostics.Process[] prs = System.Diagnostics.Process.GetProcesses();
foreach (Process pr in prs)
{
if (pr.ProcessName == "WINWORD")
{
isExist = true;
break;
}
}
return isExist;
}
或订阅即使使用SetWindowsHookEx,CBTProc callback function,HCBT_DESTROYWND关闭。
但这是一个黑客。我建议你可能做错了什么。我不确定我是否理解您的要求,但您应该让winforms应用程序在winforms应用程序的生命周期内完成它。