2009-05-10 3 views
2

ich fand diesen Code:C# HwndSourceHook mit Windows.Forms

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)); 
     } 
    } 

eine HwndSourceHook zu starten (die Zwischenablage zu erfassen). Aber dieser Code funktioniert nur mit einem "Window", aber nicht mit einem "Windows.Form".

Wie kann ich die HwndSource meines Formulars den HwndSourceHook hinzufügen?

(anstelle der Überschreibung ich die Form Load Funktion Ich denke, verwenden sollte ...)

EDIT: Danke, aber das Formular muß nicht die AddHook Funktion meine HwndSourceHook hinzufügen

Antwort

3

Wenn Sie mit WinForms, dann ist es nur myForm.Handle

Die HwndSource ist für WPF.

So können Sie einfach tun:

viewerHandle = SetClipboardViewer(myForm.Handle); 

Edit: AddHook ist auch eine Methode WPF.

Sie müssen entweder verwenden:

Application.AddMessageFilter(...); 

oder in Ihrer Form-Klasse überschreiben Sie die WndProc Methode:

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

AddMessageFilter Nachrichten für jedes Fenster in Ihrer Anwendung erfassen kann, während WndProc wird nur Empfangen von Nachrichten für das angegebene Fenster.

Verwandte Themen