2

私はこのコードを見つけました:

    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関数を使用する必要があると思います...)

編集:ありがとう、しかしフォームには私のhwndSourceHookを追加するためのAddHook関数がありません

4

1 に答える 1

4

WinFormsを使用している場合は、myForm.Handleだけです。

HwndSourceはWPF用です。

だからあなたはただすることができます:

viewerHandle = SetClipboardViewer(myForm.Handle);

編集:AddHookもWPFメソッドです。

次のいずれかを使用する必要があります。

Application.AddMessageFilter(...);

または、FormクラスでWndProcメソッドをオーバーライドします。

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

AddMessageFilterは、アプリケーション内の任意のウィンドウのメッセージをキャプチャできますが、WndProcは、指定されたウィンドウのメッセージのみを受信します。

于 2009-05-10T13:16:06.300 に答える