Обнаружение и разграничение событий буфера обмена (вырезание, копирование и вставка) - PullRequest
1 голос
/ 28 марта 2012

возможно ли это для обнаружения и различения вырезать, копировать или вставлять файлы?Я могу только обнаружить изменения в буфере обмена на дальние расстояния.

public partial class Form1 : Form
{
    [DllImport("User32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr SetClipboardViewer(IntPtr hWnd);

    [DllImport("User32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);

    private IntPtr _ClipboardViewerNext;

    private const int WM_DRAWCLIPBOARD = 0x0308;
    //  private const int WM_CUT = 0x0301;

    public Form1()
    {
        InitializeComponent();
    }

    private void StartClipboardViewer()
    {
        _ClipboardViewerNext = SetClipboardViewer(this.Handle);
    }

    private void StopClipboardViewer()
    {
        ChangeClipboardChain(this.Handle, _ClipboardViewerNext);
    }

    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
        if (m.Msg == WM_DRAWCLIPBOARD)
        {
            MessageBox.Show("Copied");
            SendMessage(_ClipboardViewerNext, m.Msg, m.WParam, m.LParam);
        }
        else
        {
            base.WndProc(ref m);
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        StartClipboardViewer();
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        StopClipboardViewer();
    }

}

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Нет, но вы можете написать оболочку для буфера обмена (так как это запечатанный класс, который вы не можете извлечь из него), чтобы отслеживать операции get / set.

0 голосов
/ 29 марта 2012

Буфер обмена не делает различий между копированием и копированием.Это семантическая разница в том, как исходное приложение обрабатывает данные (или файлы).

...