c#HwndSourceHook与Windows.Forms

时间:2009-05-10 12:25:43

标签: c# hwnd

我找到了这段代码:

    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(捕获剪贴板)。但是这段代码只适用于“Window”,而不适用于“Windows.Form”。

如何获取我的表单的hwndSource以添加hwndSourceHook?

(而不是覆盖我应该使用Form_Load函数,我认为......)

编辑:谢谢,但表格没有AddHook功能来添加我的hwndSourceHook

1 个答案:

答案 0 :(得分:3)

如果您使用的是WinForms,那么它只是myForm.Handle

HwndSource适用于WPF。

所以你可以这样做:

viewerHandle = SetClipboardViewer(myForm.Handle);

编辑:AddHook也是一种WPF方法。

你需要使用:

Application.AddMessageFilter(...);

或者,在您的Form类中重写WndProc方法:

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

AddMessageFilter可以捕获应用程序中任何窗口的消息,而WndProc只接收给定窗口的消息。