Heim >Backend-Entwicklung >C++ >Wie überwache ich Änderungen in der Zwischenablage in C#?
C#-Methode zur Überwachung von Zwischenablageänderungen
C# selbst benachrichtigt das dedizierte Ereignis nicht direkt über die Änderung der Zwischenablage. Wir können dieses Problem jedoch lösen, indem wir die Funktion „Zwischenablageüberwachung“ über Hilfssteuerelemente implementieren.
Diese Methode erfordert die Erstellung eines benutzerdefinierten Steuerelements, das von der Klasse Control
erbt und das Ereignis ClipboardChanged
enthält. Der Konstruktor des Steuerelements sollte das Zwischenablage-Viewer-Fenster einrichten und es an die Zwischenablagekette anhängen.
Wenn sich der Inhalt der Zwischenablage ändert, fängt die WndProc
-Methode des Steuerelements die WM_DRAWCLIPBOARD
-Nachricht ab und löst das ClipboardChanged
-Ereignis aus. Mit diesem Ereignishandler können die geänderten Inhalte der Zwischenablage abgerufen werden.
Das Folgende ist eine Beispielimplementierung einer Zwischenablage-Überwachungssteuerung:
<code class="language-csharp">using System; using System.ComponentModel; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Drawing; namespace ClipboardAssist { // 必须继承Control,而不是Component,才能拥有Handle [DefaultEvent("ClipboardChanged")] public partial class ClipboardMonitor : Control { IntPtr nextClipboardViewer; public ClipboardMonitor() { this.BackColor = Color.Red; this.Visible = false; nextClipboardViewer = (IntPtr)SetClipboardViewer((int)this.Handle); } /// <summary> /// 剪贴板内容已更改。 /// </summary> public event EventHandler<ClipboardChangedEventArgs> ClipboardChanged; protected override void Dispose(bool disposing) { ChangeClipboardChain(this.Handle, nextClipboardViewer); } [DllImport("User32.dll")] protected static extern int SetClipboardViewer(int hWndNewViewer); [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam); protected override void WndProc(ref System.Windows.Forms.Message m) { // 定义于winuser.h const int WM_DRAWCLIPBOARD = 0x308; const int WM_CHANGECBCHAIN = 0x030D; switch (m.Msg) { case WM_DRAWCLIPBOARD: OnClipboardChanged(); SendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam); break; case WM_CHANGECBCHAIN: if (m.WParam == nextClipboardViewer) nextClipboardViewer = m.LParam; else SendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam); break; default: base.WndProc(ref m); break; } } void OnClipboardChanged() { try { IDataObject iData = Clipboard.GetDataObject(); if (ClipboardChanged != null) { ClipboardChanged(this, new ClipboardChangedEventArgs(iData)); } } catch (Exception e) { // 忽略或弹出,不确定 // Trace.Write(e.ToString()); MessageBox.Show(e.ToString()); } } } public class ClipboardChangedEventArgs : EventArgs { public readonly IDataObject DataObject; public ClipboardChangedEventArgs(IDataObject dataObject) { DataObject = dataObject; } } }</code>
Mithilfe dieses Steuerelements können Sie Änderungen in der Zwischenablage in Ihrer C#-Anwendung überwachen.
Das obige ist der detaillierte Inhalt vonWie überwache ich Änderungen in der Zwischenablage in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!