我使用了代码http://www.cnblogs.com/DotNetEarthworm/archive/2008/12/19/1358461.html
直接复制到我的程序中 不过只在第一次运行的时候监视了剪切板,我改变剪切板内容,没有效果出现,请问该如何设置

解决方案 »

  1.   

    以下代码经测试没有问题
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    namespace WindowsApplication19
    {
        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
            bool ChangeClipboardChain(
                  IntPtr hWndRemove,
                //handle to window to remove
                  IntPtr hWndNewNext
                //handle to next window
            );
            [DllImport("user32.dll", CharSet = CharSet.Auto)]        public static extern int SendMessage(IntPtr hwnd, int wMsg,                                              IntPtr wParam,                                              IntPtr lParam);
            private IntPtr ClipboardViewerNext;        /// <summary>
            /// Add this control to the Clipboard chain to receive notification events|
            /// </summary>
            private void RegisterClipboardViewer()
            {
                ClipboardViewerNext = SetClipboardViewer(this.Handle);
            }
            /// <summary>
            /// Remove this form from the Clipboard Viewer list
            /// </summary>
            private void UnregisterClipboardViewer()
            {
                ChangeClipboardChain(this.Handle, ClipboardViewerNext);
            }
            public Form1()
            {
                InitializeComponent();
                RegisterClipboardViewer();
            }
            /// <summary>
            /// Process window messages
            /// <res>
            /// This code was not entirely written by me but has been modified from
            /// compiled from examples
            /// found while researching the subject!
            /// </res>
            /// </summary>
            /// <param name="m"></param>
            protected override void WndProc(ref Message m)
            {
                const int WM_DRAWCLIPBOARD = 0x308;
                const int WM_CHANGECBCHAIN = 0x030D;
                switch (m.Msg)
                {
                    case WM_DRAWCLIPBOARD:
                        MessageBox.Show(System.Windows.Forms.Clipboard.GetText());
                        SendMessage(ClipboardViewerNext, m.Msg, m.WParam, m.LParam);
                        break;
                    case WM_CHANGECBCHAIN:
                        if (m.WParam == ClipboardViewerNext)
                            ClipboardViewerNext = m.LParam;
                        else
                            SendMessage(ClipboardViewerNext, m.Msg, m.WParam, m.LParam);
                        break;
                    default:
                        base.WndProc(ref m);
                        break;
                }
            }        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                UnregisterClipboardViewer();
            }
        }
    }
      

  2.   

    测试了一下 的确可以 我想问题是不是 这个功能的实现要关闭form 我的程序的form设置成不能关闭另外我的程序里面有一个进程
      

  3.   

    好像找到问题了
    我设置了//this.ShowInTaskbar = false;
    这样好像就不行了