Отловить изменение содержимого буфера обмена - C#

Узнай цену своей работы

Формулировка задачи:

здравствуйте, мой первый вопрос, поэтому если не в том разделе написал, прошу прощения. в программе обрабатываются сообщения
protected override void WndProc(ref Message m)
        {
                //проверка на зарегестрированную комбинацию клавиш
            if ((m.Msg == 0x0312) && (m.WParam.ToString() == glAtom.ToString()))
            {
                    //показываю меню
                MenuBuffer.Show(Cursor.Position);
 
                base.WndProc(ref m);
                return;
            }
 
            switch (m.Msg)
            {
                    //изменилось содержимое уфера
                case WM_DRAWCLIPBOARD:
                    {
                        ClipboardChanged();
                            //знаю зачем, но и без этого работает
                        SendMessage(nextClipboardViewer, WM_DRAWCLIPBOARD, IntPtr.Zero, IntPtr.Zero);
                        break;
                    }
 
                case WM_CHANGECBCHAIN:
                    {
                        if (m.WParam == nextClipboardViewer)
                        {
                            nextClipboardViewer = m.LParam;
                        }
                        else
                        {
                            SendMessage(nextClipboardViewer, WM_CHANGECBCHAIN, m.WParam, m.LParam);
                        }
                        m.Result = IntPtr.Zero; // уведомляем систему об обработке сообщения
                        break;
                    }
                default:
                    {
                        break;
                    }
            }
 
            base.WndProc(ref m);
        }
при изменении содержимого буфера вызывается функция
private void ClipboardChanged()
        {
            string data = "";
 
            if (Clipboard.ContainsText())
            {
                data = Clipboard.GetText();
 
                if (data != "")
                {
                    //заносим в список
                    BufferContentList.Insert(0, data);
 
                        //добавляем из списка
                    for (int i = 0; i < BufferContentList.Count(); i++)
                    {
                    [I] //MenuBuffer.Items.Add(BufferContentList[i]);[/I]
                        [B]MenuBuffer.Items.Add(BufferContentList[i].Substring(0, 8));[/B]
                    }
 
                }
            }
        }
при отладке после вызова функции SubString (выделенная строчка) - управление передается в функцию обработки сообщений, ошибок не появляется, но и строчки в меню не добавляются. При использовании закомментированной строчки (курсором выделена) все работает. Может кто объяснить, в чем проблема?

Решение задачи: «Отловить изменение содержимого буфера обмена»

textual
Листинг программы
WndProc

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.8 из 5
Похожие ответы