2012-03-28 10 views
1

Ist es möglich, Dateien auszuschneiden, zu kopieren oder einzufügen? Ich kann eine Änderung in der Zwischenablage nur zu weit erkennen.Erkennung und Unterscheidung von Zwischenablageereignissen (Ausschneiden, Kopieren und Einfügen)

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

} 
+1

Nein, das ist ein Programmimplementierungsdetail, das Sie nicht mit einem Zwischenablage-Viewer sehen können. Sie sehen nur Änderungen in der Zwischenablage. –

Antwort

1

Nein, aber man konnte einen Wrapper für die Zwischenablage schreiben (wie es eine versiegelte Klasse ist kann man nicht daraus ableiten) den Überblick über die get/set-Operationen zu halten.

0

Die Zwischenablage unterscheidet nicht zwischen Ausschneiden und Kopieren. Es ist ein semantischer Unterschied in der Art, wie die Quellanwendung die Daten (oder Dateien) behandelt.

Verwandte Themen