Я делаю приложение WPF, которое отслеживает все изменения в буфере обмена.Для этого я зарегистрировал свое окно как слушатель формата буфера обмена.
Моя проблема такая: : я копирую файл в проводнике и получаю уведомление о том, что буфер обмена изменился (конечно, это то, что я хочу), но когда я закрываю окно Проводника с копируемым мной файлом, я снова получаю уведомление.Как предотвратить получение этого уведомления?
Вот мой класс Win32:
internal const int WM_CLIPBOARDUPDATE = 0x031D;
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool AddClipboardFormatListener(IntPtr hwnd);
Вот мой метод регистрации окна и метод получения уведомлений об изменении буфера обмена.
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;
}