关闭后,Microsoft word调用C#Clipboard更改事件

时间:2015-04-19 09:29:56

标签: c# clipboard

在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或我使用剪贴板内容的任何位置。 有没有人知道如何防止这种情况?

1 个答案:

答案 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;
    }

或订阅即使使用SetWindowsHookExCBTProc callback function,HCBT_DESTROYWND关闭。

但这是一个黑客。我建议你可能做错了什么。我不确定我是否理解您的要求,但您应该让winforms应用程序在winforms应用程序的生命周期内完成它。