я делаю это в C#, но, я думаю, это не язык конкретных проблем ...Изменение содержимого буфера обмена на изменение буфера обмена
У меня есть пример кода о том, как определить, когда содержимое изменений в буфере обмена. Теперь я хочу изменить текст, который только что скопирован (разделите некоторые теги), и замените текст буфера обмена на фиксированный.
Но если я установил SetDataObject(), когда обнаружил, что содержимое буфера обмена изменилось, это приведет к созданию сообщения, которое содержимое буфера обмена изменилось снова. В теории, я думаю, это звучит как бесконечный цикл (на практике по какой-то причине это не так).
Какова стратегия для этой модификации после того, как, и отправил сообщение в цепочку мониторинга буфера обмена?
P.S. В качестве теста, который я выполняю, но что происходит, строка Clipboard.SetDataObject .. вызывается дважды. Я не понимаю, почему, я бы ожидал, что это сделает это бесконечно.
case Win32.Msgs.WM_DRAWCLIPBOARD:
String clipboardText = GetClipboardText();
if (!String.IsNullOrEmpty(clipboardText))
{
Clipboard.SetDataObject("test(" + clipboardText + ")!");
}
Win32.User32.SendMessage(_ClipboardViewerNext, m.Msg, m.WParam, m.LParam);
Он ожидает замкнутую петлю, но только видеть это случается дважды в этом примере ... – cjk
Но это был не вопрос. Фактический вопрос заключался в том, как правильно справляться с этим. Уклонение от цикла infitite, вероятно, связано с тем, что он не пропускает сообщение Windows (захват его), когда он обрабатывает сообщение proc. –
есть лучший способ (общий), чтобы предотвратить рекурсию. См. Мой ответ ниже. – Giorgi