System.Runtime.InteropServices.DllImport("user32")]
        private static extern IntPtr SetClipboardViewer(IntPtr hwnd);
        [System.Runtime.InteropServices.DllImport("user32")]
        private static extern IntPtr ChangeClipboardChain(IntPtr hwnd, IntPtr hWndNext);
        [System.Runtime.InteropServices.DllImport("user32")]
        private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);        const int WM_DRAWCLIPBOARD = 0x308;
        const int WM_CHANGECBCHAIN = 0x30D;
        const int WM_GETMINMAXINFO = 0x24;
        IntPtr NextClipHwnd;private void Form1_Load(object sender, EventArgs e)
        {
            NextClipHwnd = SetClipboardViewer(this.Handle);
          
        }        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            ChangeClipboardChain(this.Handle, NextClipHwnd);
            SendMessage(NextClipHwnd, WM_CHANGECBCHAIN, this.Handle, NextClipHwnd);
        }
        protected override void WndProc(ref System.Windows.Forms.Message m)
        {
            switch (m.Msg)
            {
                case WM_GETMINMAXINFO:
                    SendMessage(NextClipHwnd, m.Msg, m.WParam, m.LParam);
                    IDataObject iData = Clipboard.GetDataObject();
                    if (iData.GetDataPresent(DataFormats.Text) | iData.GetDataPresent(DataFormats.OemText))
                    {
                   label1.Text = (String)iData.GetData(DataFormats.Text);                    }
                    break;
                default:
                    base.WndProc(ref m);
                    break;
            }
        }