>백엔드 개발 >C#.Net 튜토리얼 >C#에서 Windows 클립보드 모니터를 구현하기 위한 코드에 대한 자세한 소개

C#에서 Windows 클립보드 모니터를 구현하기 위한 코드에 대한 자세한 소개

黄舟
黄舟원래의
2017-03-11 13:38:551676검색

Windows 클립보드

클립보드는 Windows에 내장된 매우 유용한 도구로, 작은 클립보드를 통해 전송 및 공유가 가능합니다. 다양한 애플리케이션 간의 정보. 그러나 문제는 클립보드가 하나의 데이터 복사본만 보관할 수 있고 새 데이터가 전달될 때마다 이전 데이터를 덮어쓰게 된다는 것입니다.

관련 Windows API

가장 중요한 것은 SetClipboardViewer입니다. 클립보드의 내용이 변경될 때마다 WM_DRAWCLIPBOARD를 통해 알림을 받을 창을 추가하는 기능입니다. 메시지 창 체인.
클립보드 뷰어 체인의 다음 창에 대한 핸들이 아직 반환되지 않았으므로 애플리케이션은 SetClipboardViewer를 호출하는 동안 수신한 WM_DRAWCLIPBOARD 메시지를 전달해서는 안 됩니다
.
클립보드 관찰자 체인에서 창 체인을 제거하려면 애플리케이션이 ChangeClipboard 멤버 함수를 호출해야 합니다.


        #region Definitions
        //Constants for API Calls...
        private const int WM_DRAWCLIPBOARD = 0x308;
        private const int WM_CHANGECBCHAIN = 0x30D;

        //Handle for next clipboard viewer...
        private IntPtr mNextClipBoardViewerHWnd;

        //API declarations...
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static public extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static public extern bool ChangeClipboardChain(IntPtr HWnd, IntPtr HWndNext);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
        #endregion

wndproc 함수

운영 체제는 왼쪽 버튼을 아래로, 왼쪽 버튼을 위로 누르는 등 일련의 메시지를 애플리케이션에 보냅니다. GetMessage 다른 메서드는 최종적으로 응용 프로그램에서 정의한 창 프로세스에 대한 포인터를 가리키는 창 프로세스(WndProc [영어로 전체 이름: windows 프로세스])에 메시지를 제출합니다.

클립보드 내용 변경 이벤트를 처리하려면 이 함수를 다시 작성해야 합니다.

        #region Message Process
        //Override WndProc to get messages...
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case WM_DRAWCLIPBOARD:
                    {
                        //The clipboard has changed...
                        //##########################################################################
                        // Process Clipboard Here :)........................
                        //##########################################################################
                        SendMessage(mNextClipBoardViewerHWnd, m.Msg, m.WParam.ToInt32(), m.LParam.ToInt32());

                        //显示剪贴板中的文本信息
                        if (Clipboard.ContainsText())
                        {
                            label1.Text = Clipboard.GetText();
                        }
                        //显示剪贴板中的图片信息
                        if (Clipboard.ContainsImage())
                        {
                            pictureBox1.Image = Clipboard.GetImage();
                            pictureBox1.Update();
                        }
                        break;
                    }
                case WM_CHANGECBCHAIN:
                    {
                        //Another clipboard viewer has removed itself...
                        if (m.WParam == (IntPtr)mNextClipBoardViewerHWnd)
                        {
                            mNextClipBoardViewerHWnd = m.LParam;
                        }
                        else
                        {
                            SendMessage(mNextClipBoardViewerHWnd, m.Msg, m.WParam.ToInt32(), m.LParam.ToInt32());
                        }
                        break;
                    }
            }
            base.WndProc(ref m);
        }
        #endregion

효과:



위 내용은 C#에서 Windows 클립보드 모니터를 구현하기 위한 코드에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.