Приветствую.
| Код | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices;
namespace Перехват_Буфера_Обмена { public partial class Form1 : Form { [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);
public Form1() { InitializeComponent(); } IntPtr nextClipboardViewer; private void Form1_Load(object sender, EventArgs e) { nextClipboardViewer = (IntPtr)SetClipboardViewer((int) this.Handle); } protected override void WndProc(ref System.Windows.Forms.Message m) { // defined in winuser.h const int WM_DRAWCLIPBOARD = 0x308; const int WM_CHANGECBCHAIN = 0x030D;
switch (m.Msg) { case WM_DRAWCLIPBOARD: DisplayClipboardData(); 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 DisplayClipboardData() { try { IDataObject iData = new DataObject(); iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Rtf)) { richTextBox1.Rtf = (string)iData.GetData(DataFormats.Rtf); Text = "Simple"; } else if (iData.GetDataPresent(DataFormats.Text)) { richTextBox1.Text = (string)iData.GetData(DataFormats.Text); Text = "URL"; } else richTextBox1.Text = "[Clipboard data is not RTF or ASCII Text]"; } catch (Exception e) { MessageBox.Show(e.ToString()); } } } }
|
|