c # ловит изменения буфера обмена, не будет работать, если форма свернута в трей - PullRequest
6 голосов
/ 22 марта 2010

У меня проблема с использованием "Catch Clipboard Events code", найденного по этой ссылке:

Событие буфера обмена C #

код отлично работает, только если форма остается на переднем плане, а не свернута в трей, НО: если вы добавляете уведомление и минимизируете форму в трей, а параметр showintaskbar становится ложным (чтобы в трее был только значок ), программа больше не будет перехватывать любые изменения в буфере обмена ... даже если вы максимизируете форму обратно, она не будет работать снова ... вы должны перезапустить программу ..

Есть идеи, как решить эту проблему? Как я могу поймать изменения в буфере обмена, даже если форма свернута в трее!?

любая помощь очень ценится ...

Спасибо

Ответы [ 2 ]

1 голос
/ 23 марта 2010

Так или иначе, вы можете иметь другую скрытую форму и использовать ее для перехвата сообщений Windows. Никогда не закрывайте / заново создавайте это окно. Он открывается при запуске, остается открытым, но невидимым. Это будет работать.

Chris

1 голос
/ 22 марта 2010

Должно работать, если свернуто - правда, свернуто или скрыто. Если ваша реализация «свернутых» приводит к разрушению окна, то этот дескриптор недопустим. И цепочка буфера обмена теперь разорвана для того, что слушало события буфера обмена вниз по течению ...

Добавьте туда отладочный код для отображения this.Handle в виде строки (например: «123456»). Поместите вызов SetClipboardViewer в событие щелчка на форме. Нажмите на нее, чтобы увидеть номер. Минимизировать, восстановить. Нажмите еще раз. У вас есть такой же номер? вам следует. Если нет, то здесь кроется проблема. События буфера обмена ДОЛЖНЫ идти в окно, которое остается вокруг. Это может быть скрытое окно на заднем плане.

- Chris

...