C#.NETにてクリップボードイベントの取得
クリップボードに何かコピーされたときに、イベントをキャッチする。
まずはフォームの定義に追加
public class Form1 : System.Windows.Forms.Form { <code class=a>[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); IntPtr nextClipboardViewer;</code>
次はコンストラクタに以下を追加
public Form1() { InitializeComponent(); <code class=a>nextClipboardViewer = (IntPtr)SetClipboardViewer((int)this.Handle);</code>
次はDispose()に追加
protected override void Dispose( bool disposing ) { <code class=a>ChangeClipboardChain(this.Handle, nextClipboardViewer);</code>
そしてWndProc()を追加し、
protected override void WndProc(ref Message m) { const int WM_DRAWCLIPBOARD = 0x308; const int WM_CHANGECBCHAIN = 0x030D; switch(m.Msg) { case WM_DRAWCLIPBOARD: ClipBoardのイベント関数(); 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; } }
これで終了。
Ctrl+Cとかやると、ClipBoardのイベント関数();が実行される。