Microsoft单词调用 C# 剪贴板更改事件后关闭



在 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 应用程序的生命周期内执行此操作。

最新更新