2012-03-28 26 views
1

ファイルの切り取り、コピー、貼り付けを検出し区別することは可能ですか?私は遠くにクリップボードの変更を検出することができます。クリップボードイベントの検出と区別(切り取り、コピー、貼り付け)

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

いいえ、それはあなたがクリップボードビューアで見ることができないプログラム実装の詳細です。クリップボードの変更のみが表示されます。 –

答えて

1

ありませんが、あなたは取得/設定操作を追跡するために(それはシールクラスだとして、あなたがそれから派生することはできません)クリップボードのラッパーを書くことができます。

0

クリップボードは切り取りとコピーを区別しません。これは、ソースアプリケーションがデータ(またはファイル)を処理する意味上の違いです。

関連する問題