Maison > développement back-end > Tutoriel C#.Net > Le code C# pour implémenter Windows Clipboard Monitor est présenté en détail

Le code C# pour implémenter Windows Clipboard Monitor est présenté en détail

黄舟
Libérer: 2017-03-11 13:38:55
original
1704 Les gens l'ont consulté

Clipboard Windows

Le ClipBoard est une zone en mémoire C'est un outil très utile intégré à Windows. Grâce au petit presse-papier, un pont coloré permet de transférer et de partager. informations entre diverses applications. Cependant, le problème est que le presse-papiers ne peut conserver qu'une seule copie des données, et chaque fois que de nouvelles données sont transmises, les anciennes seront écrasées.

API Windows associée

La plus importante est SetClipboardViewer Chaque fois que le contenu du presse-papiers change, cette fonction ajoute la fenêtre à notifier via WM_DRAWCLIPBOARD. chaîne de fenêtres de messages.
Étant donné que le handle de la fenêtre suivante dans la chaîne de visualisation du presse-papiers n'a pas encore été renvoyé, l'application ne doit pas transmettre le message WM_DRAWCLIPBOARD qu'elle a reçu lors de l'appel à SetClipboardViewer
.
Si vous souhaitez supprimer la chaîne de fenêtres de la chaîne d'observateur du presse-papiers, l'application doit appeler la fonction membre 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
Copier après la connexion

Fonction wndproc

Le système d'exploitation envoie une série de messages à l'application, tels que le bouton gauche enfoncé et le bouton gauche relevé, et le L'application va Le message est finalement soumis au processus de fenêtre (WndProc [nom complet en anglais : processus Windows]) via des méthodes telles que GetMessage, qui pointe vers un pointeur vers un processus de fenêtre défini par l'application.

Nous devons réécrire cette fonction pour gérer l'événement de changement de contenu du presse-papiers :

        #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
Copier après la connexion

Effet :



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal