如何在 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
我正在制作一个 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