C#을 이용한 실시간 클립보드 모니터링
이 문서에서는 클립보드 변경 사항을 효율적으로 모니터링하는 C# 애플리케이션을 만드는 방법을 보여줍니다. 문제는 클립보드의 내용이 업데이트되는 시점을 감지하는 것입니다.
해결책:
Windows 메시지 처리를 활용하면 강력한 솔루션이 제공됩니다. 여기에는 다음이 포함됩니다.
사용자 정의 컨트롤: Control
(Component
아님)에서 상속되는 사용자 정의 컨트롤은 창 핸들을 얻는 데 중요합니다. 이 핸들은 Windows 메시지 대기열과 상호 작용하는 데 필요합니다.
WndProc
재정의: WndProc
메서드는 Windows 메시지를 가로챕니다. 우리는 WM_DRAWCLIPBOARD
.
WM_DRAWCLIPBOARD
처리: 이 메시지는 클립보드 업데이트를 나타냅니다. WndProc
메소드 내에서 WM_DRAWCLIPBOARD
이 수신되면 OnClipboardChanged
메소드가 호출됩니다.
데이터 검색: OnClipboardChanged
은 Clipboard.GetDataObject()
을 사용하여 업데이트된 클립보드 데이터를 검색합니다.
이벤트 트리거: 마지막으로 사용자 정의 ClipboardChanged
이벤트가 발생하여 새 데이터를 전달합니다.
다음은 클립보드 모니터링 제어를 보여주는 코드 예제입니다.
<code class="language-csharp">using System; using System.ComponentModel; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Drawing; namespace ClipboardMonitorApp { [DefaultEvent("ClipboardChanged")] public class ClipboardMonitor : Control { private IntPtr nextClipboardViewer; public ClipboardMonitor() { this.BackColor = Color.Red; this.Visible = false; nextClipboardViewer = SetClipboardViewer((int)this.Handle); } public event EventHandler<ClipboardChangedEventArgs> ClipboardChanged; protected override void Dispose(bool disposing) { ChangeClipboardChain(this.Handle, nextClipboardViewer); base.Dispose(disposing); } [DllImport("User32.dll")] private static extern int SetClipboardViewer(int hWndNewViewer); [DllImport("User32.dll", CharSet = CharSet.Auto)] private static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext); [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam); protected override void WndProc(ref Message m) { 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; } } private void OnClipboardChanged() { try { IDataObject data = Clipboard.GetDataObject(); ClipboardChanged?.Invoke(this, new ClipboardChangedEventArgs(data)); } catch (Exception ex) { // Handle exceptions appropriately (e.g., log the error) MessageBox.Show(ex.ToString()); } } } public class ClipboardChangedEventArgs : EventArgs { public readonly IDataObject DataObject; public ClipboardChangedEventArgs(IDataObject dataObject) { DataObject = dataObject; } } }</code>
이 세련된 코드는 C# 애플리케이션의 클립보드 변경 사항을 모니터링하기 위한 더욱 강력하고 오류 처리 솔루션을 제공합니다. 프로덕션 환경에서는 잠재적인 예외를 적절하게 처리하는 것을 잊지 마세요.
위 내용은 C#에서 클립보드 변경 사항을 어떻게 감지할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!