using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace DisablingClipboard
{
public class Form1 : System.Windows.Forms.Form
{
private System.ComponentModel.Container components = null;
const int WM_DRAWCLIPBOARD=0x0308;
const int WM_CHANGECBCHAIN=0x030D;
private System.Windows.Forms.CheckBox checkBox1;
private IntPtr nextviewer;
public Form1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
ChangeClipboardChain(this.Handle, nextviewer);
components.Dispose();
}
}
base.Dispose( disposing );
}
protected void RegisterWindow()
{
nextviewer = SetClipboardViewer(this.Handle);
}
protected void UnregisterWindow()
{
ChangeClipboardChain(this.Handle, nextviewer);
}
protected void ClearClipboard()
{
Clipboard.SetDataObject(new DataObject());
}
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_CHANGECBCHAIN:
if (nextviewer==m.WParam) nextviewer=m.LParam;
else SendMessage(nextviewer,
m.Msg, m.WParam, m.LParam);
break;
case WM_DRAWCLIPBOARD:
ClearClipboard();
SendMessage(nextviewer, m.Msg,
m.WParam, m.LParam);
break;
default:
base.WndProc(ref m);
break;
}
}
#region Windows Form Designer generated code
// ...skipped...
#endregion
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void checkBox1_CheckedChanged(object sender,
System.EventArgs e)
{
if (this.checkBox1.Checked) RegisterWindow();
else UnregisterWindow();
}
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd,
int Msg, IntPtr wParam, IntPtr lParam);
[DllImport("User32.dll")]
public static extern IntPtr SetClipboardViewer(
IntPtr hWndNewViewer);
[DllImport("User32.dll")]
public static extern IntPtr ChangeClipboardChain(
IntPtr hWndRemove, IntPtr hWndNewNext);
}
}
|