В своем приложении я устанавливаю мониторинг буфера обмена по SetClipboardViewer. Мне возвращают HWND окна, которому я должен по цепочке передавать сообщения буфера — SendMessage(hwndNextClipboardViewer, uMsg, wParam, lParam);
Заметил вот что — иногда, когда ворд запускаю, он, бывает, падает, при этом в моей программе вылетает ASSERT, что hwndNextClipboardViewer не валидный оконный хэндл. Проверить валидность-то я могу, но получается, что если один из цепочки наблюдателей вылетел, то все последующие наблюдатели отваливаются до перезагрузки/перелогона системы? Если так, то как-то грустно ;(
M> Заметил вот что — иногда, когда ворд запускаю, он, бывает, падает, при этом в моей программе вылетает ASSERT, что hwndNextClipboardViewer не валидный оконный хэндл. Проверить валидность-то я могу, но получается, что если один из цепочки наблюдателей вылетел, то все последующие наблюдатели отваливаются до перезагрузки/перелогона системы? Если так, то как-то грустно ;(
Последний раз когда я с этой штукой работал — действительно было грустно. Потому мелкософт изобрел новые велосипеды, с более круглыми колесами.
Как много веселых ребят, и все делают велосипед...
Re: Наблюдатели за буфером обмена - что будет, если один из них падает?
Здравствуйте, Marty, Вы писали:
M> но получается, что если один из цепочки наблюдателей вылетел, то все последующие наблюдатели отваливаются до перезагрузки/перелогона системы?
Именно так!
Но всякие хитрые программы (типа тех же ворд/ексель/и.т.д) не отчаиваются, а просто регистрируют себя еще раз, если обнаружат, что цепочка обработчиков развалилась. Иногда, правда, они это делают как-то криво...
Re[2]: Наблюдатели за буфером обмена - что будет, если один из них падает?
Здравствуйте, ononim, Вы писали:
O>Последний раз когда я с этой штукой работал — действительно было грустно. Потому мелкософт изобрел новые велосипеды, с более круглыми колесами.
Здравствуйте, sergeyt4, Вы писали:
M>> но получается, что если один из цепочки наблюдателей вылетел, то все последующие наблюдатели отваливаются до перезагрузки/перелогона системы?
S>Именно так!
S>Но всякие хитрые программы (типа тех же ворд/ексель/и.т.д) не отчаиваются, а просто регистрируют себя еще раз, если обнаружат, что цепочка обработчиков развалилась. Иногда, правда, они это делают как-то криво...
Так вроде же не определить, что отвалилось где-то раньше по цепочке. Определяется, что отвалился следующий наблюдатель, но в этом случае для своего приложения проблем-то нет.
Здравствуйте, Marty, Вы писали:
M>Так вроде же не определить, что отвалилось где-то раньше по цепочке. Определяется, что отвалился следующий наблюдатель, но в этом случае для своего приложения проблем-то нет.
Ворду и подобным программа проще. Пользователи периодически что-то копируют в буфер обмена в самом Ворде. И Ворд может просто проверить, пришло ли ему уведомление о смене содержимого буфера обмена после операции копирования, если не пришло, то кто-то отвалился и пора себя перерегистрировать.