Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测与诊断;区分剪贴板事件(剪切、复制和粘贴)_C#_Events_Clipboard - Fatal编程技术网

C# 检测与诊断;区分剪贴板事件(剪切、复制和粘贴)

C# 检测与诊断;区分剪贴板事件(剪切、复制和粘贴),c#,events,clipboard,C#,Events,Clipboard,它是否可以检测和区分文件的剪切、复制或粘贴?我只能检测到剪贴板中的更改到far public partial class Form1 : Form { [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SetClipboardViewer(IntPtr hWnd); [DllImport("User32.dll", CharSet = CharSet.Auto)]

它是否可以检测和区分文件的剪切、复制或粘贴?我只能检测到剪贴板中的更改到far

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

}

不,但您可以为剪贴板编写包装(因为它是一个密封类,您无法从中派生),以跟踪get/set操作。

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

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

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

不,这是一个用剪贴板查看器看不到的程序实现细节。您只能看到对剪贴板的更改。不,这是一个用剪贴板查看器无法看到的程序实现细节。您只能看到对剪贴板的更改。