ホームページ  >  記事  >  バックエンド開発  >  C# で Windows クリップボード モニターを実装するためのコードの詳細な紹介

C# で Windows クリップボード モニターを実装するためのコードの詳細な紹介

黄舟
黄舟オリジナル
2017-03-11 13:38:551597ブラウズ

Windowsクリップボード

クリップボード(クリップボード)は、Windowsに組み込まれた非常に便利なツールであり、さまざまなアプリケーションを使用できるようにします。それらの間で情報を転送および共有することができます。ただし、問題は、クリップボードに保持できるデータのコピーは 1 つだけであり、新しいデータが渡されるたびに古いデータが上書きされてしまうことです。

関連する最も重要な 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 関数

オペレーティング システムは、左ボタンを押したり左ボタンを押したりする一連のメッセージをアプリケーションに送信し、アプリケーションは最終的にメッセージをウィンドウ プロセス (WndProc [フルネーム]) に送信します。英語] GetMessage およびその他のメソッド 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。