c # HwndSourceHook с Windows.Forms - PullRequest
2 голосов
/ 10 мая 2009

я нашел этот код:

    protected override void OnSourceInitialized(EventArgs e)
    {
        base.OnSourceInitialized(e);
        HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;

        if (hwndSource != null)
        {
            installedHandle = hwndSource.Handle;
            viewerHandle = SetClipboardViewer(installedHandle);
            hwndSource.AddHook(new HwndSourceHook(this.hwndSourceHook));
        }
    }

чтобы запустить hwndSourceHook (чтобы захватить буфер обмена). Но этот код работает только с «окном», но не с «Windows.Form».

Как мне получить hwndSource моей формы для добавления hwndSourceHook?

(вместо переопределения я должен использовать функцию Form_Load, я думаю ...)

РЕДАКТИРОВАТЬ: Спасибо, но форма не имеет функции AddHook для добавления моего hwndSourceHook

1 Ответ

3 голосов
/ 10 мая 2009

Если вы используете WinForms, то это просто myForm.Handle

HwndSource для WPF.

Так что вы можете просто сделать:

viewerHandle = SetClipboardViewer(myForm.Handle);

Редактировать: AddHook также является методом WPF.

Вам необходимо использовать либо:

Application.AddMessageFilter(...);

или в вашем классе Form переопределите метод WndProc:

protected override void WndProc(ref Message m) {...}

AddMessageFilter может захватывать сообщения для любого окна в вашем приложении, тогда как WndProc будет получать сообщения только для данного окна.

...