如何在 C# 中不获取不必要的剪贴板更新

How to not get unnecessary clipboard update in C#

我正在制作一个 WPF 应用程序来监视剪贴板中的每个更改。为此,我将 window 注册为剪贴板格式侦听器。

我的问题是这样的: 我正在文件资源管理器中复制文件,我收到剪贴板已更改的通知(当然这是我的想要)但是 当我关闭 文件资源管理器 window 和我复制的文件时,我再次收到通知。如何防止收到此通知?

这是我的 Win32 class:

internal const int WM_CLIPBOARDUPDATE = 0x031D;

[DllImport("user32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool AddClipboardFormatListener(IntPtr hwnd);

这是我注册window的方法和接收剪贴板已更改通知的方法。

private void _AddClipboardFormatListener()
{
    WindowInteropHelper wih = new WindowInteropHelper(_window);

    hWndSource = HwndSource.FromHwnd(wih.EnsureHandle());
    hWndSource.AddHook(WndProc);

    Win32.AddClipboardFormatListener(hWndSource.Handle);
}

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    switch (msg)
    {
        //Here I get the unnecessary update.
        case Win32.WM_CLIPBOARDUPDATE:

            //Invoke event that the clipboard has changed.
            break;
    }

    return IntPtr.Zero;
}

如果有人正在寻找有关该问题的更多信息,我刚刚发现了这个问题,希望它能有所帮助 -clipboard Listener event is being called twice