在 C# 中的 winform 应用程序中,我使用此代码在窗口剪贴板内容更改时执行某些操作。
[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 或我使用剪贴板内容的任何位置。有谁知道如何防止这种情况?
删除侦听器以停止接收事件。
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回调函数HCBT_DESTROYWND。
但这是一个黑客。我建议你可能做错了什么。我不确定我是否理解您的要求,但您应该让您的 winforms 应用程序在 winforms 应用程序的生命周期内执行此操作。