Как не получить ненужное обновление буфера обмена в C # - PullRequest
0 голосов
/ 18 мая 2019

Я делаю приложение 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...