Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关闭后Microsoft word调用C#剪贴板更改事件_C#_Clipboard - Fatal编程技术网

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

关闭后Microsoft word调用C#剪贴板更改事件,c#,clipboard,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 = 0x031

在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();
}
现在,当我从
MicrosoftWord
复制一些文本时,效果很好。但问题是,当我关闭
Word应用程序时,它仍会调用更改事件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;
    }
或者使用HCBT_destrownd订阅关闭


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

我猜每次更新剪贴板时,都会触发多个
wmclipboadupdate
事件。因此,更好的方法是过滤WndProc中的消息-不要调用
richText.Paste()重复。有关
CBTProc回调函数的信息可能会有所帮助,但您的代码不能。原因windows中可能会打开更多的
WINWORD
s,并且此问题也可能发生在某些其他应用程序中。无论如何谢谢你