2015-06-17 1 views
1

«Как я могу получить событие, чтобы увидеть, что копируется в буфер обмена?» .... это очень распространенные и старые вопросы. Например, как this forum questionКак работать с сообщением буфера обмена WM_DRAWCLIPBOARD, который отправляется несколько раз по нескольким причинам

Мой опыт в том, что некоторые приложения запускают событие несколько раз. Я обнаружил, что люди говорят, что имеют дело только с последним разом. Как именно я должен это делать? Как узнать в последний раз?

Далее, когда я даю фокус на Outlook 2007, он запускает буфер обмена и запускает его несколько раз. Также, когда я нажимаю в Outlook, сообщение буфера обмена запускается. Как я должен различать реальную копию чего-то в буфере обмена и другие сообщения, которые мне не нужны.

Я знаю, что могу проверить, совпадает ли содержимое, но в моем случае это ограничение, поскольку использование может копировать одно и то же содержимое дважды.

Я знаю об этом unanswered question here. Это только половина моих вопросов, и люди в любом случае уклоняются от копирования разных типов.

+0

Буфер обмена зрители являются хрупкими, они должны сотрудничать со всеми другими зрителями. Как и тот, который использует программа Office. Если вы хотите узнать, изменилось ли содержимое буфера обмена, просто не используйте средство просмотра. Вызовите AddClipboardFormatListener() и обратите внимание на WM_CLIPBOARDUPDATE, который вы сейчас получите. –

+0

Я перешел на WM_CLIPBOARDUPDATE. Давайте уточним. Когда я нажимаю на Outlook - WM_CLIPBOARDUPDATE запускается 3 раза - текст точно такой же, и форматы данных в буфере обмена также точно такие же. Итак, что «обновлено» или «изменено»? – darbid

+0

Вам нужно спросить Microsoft. Почему это имеет значение? Это не должно. –

ответ

0

Спасибо, Ганс, за то, что он дал мне кое-что, о чем нужно подумать. У меня нет кода в качестве ответа, но я могу дать некоторые подсказки о том, как я решил эту проблему для меня.

  1. Outlook запускает буфер обмена несколько раз и даже запускает буфер обмена, когда он получает фокус. Решение. Я реагирую только на одно из событий в течение 200 мс. Я также реагирую только на событие буфера обмена при нажатии клавиши управления. (для меня это особый случай, так как я хочу сделать это только для копирования с клавиатуры, а не из копий мыши)
  2. Когда событие запущено, его запускают из другой программы, поэтому вы еще не можете получить доступ к буфере обмена. Решение. Только одна программа может получить к ней доступ, поэтому вам нужно продолжать попытки после того, как событие произошло, вам также нужно надеяться, что другая программа освободит буфер обмена, чтобы вы могли посмотреть на него.
Смежные вопросы