Отловить изменение содержимого буфера обмена - C#
Формулировка задачи:
здравствуйте, мой первый вопрос, поэтому если не в том разделе написал, прошу прощения.
в программе обрабатываются сообщения
при изменении содержимого буфера вызывается функция
при отладке после вызова функции SubString (выделенная строчка) - управление передается в функцию обработки сообщений, ошибок не появляется, но и строчки в меню не добавляются.
При использовании закомментированной строчки (курсором выделена) все работает.
Может кто объяснить, в чем проблема?
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]
}
}
}
}Решение задачи: «Отловить изменение содержимого буфера обмена»
textual
Листинг программы
WndProc