检测和区分剪贴板事件(剪切、复制和粘贴)

问题描述 投票:0回答:3

是否可以检测和区分文件的剪切、复制或粘贴?我只能检测到剪贴板中的变化。

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();
    }

}
c# events clipboard
3个回答
1
投票

不,但是您可以为剪贴板编写一个包装器(因为它是一个您不能从中派生的密封类)以跟踪获取/设置操作。


0
投票

剪贴板不区分剪切和复制。这是源应用程序处理数据(或文件)方式的语义差异。


0
投票

剪贴板不区分剪切和复制。这是源应用程序处理数据(或文件)方式的语义差异。

对不起-那是错误的!

我正在写一个探索者可能的应用程序。

现在我在我的应用程序列表视图中的目录中复制/剪切文件, 使用板载上下文菜单中的窗口。

现在我更改我的应用程序中的目录并粘贴它 剪贴板例程中的板载上下文菜单,我 在使用 Windows 上下文菜单之前填充(剪切/复制)。

我无法区分粘贴 - 它是剪切还是复制过程!

你?

© www.soinside.com 2019 - 2024. All rights reserved.