Что если две программы сделают это? Практический экзамен
Это перевод What if two programs did this? Practical exam. Автор: Реймонд Чен.
У клиента, который не читает этот блог, есть следующий вопрос.
У нашего приложения есть требование: оно должно быть поверх всех других окон, даже если показываются окна со стилем topmost. Для этого в наших сообщениях
WM_KILLFOCUS
иWM_PAINT
мы делаем наше окно topmost, а затем вызываемSetWindowPos
, чтобы вынести наше окно поверх остальных, и дополнительно мы вызываемSetForegroundWindow
— просто на всякий случай.В результате наше приложение конфликтует с неким другим приложением, поскольку в том приложении также используется похожая логика. Также есть некоторые другие приложения, которым удаётся победить наш код, так что они закрывают окна нашего приложения (эти приложения разработаны не нами, у нас нет контроля над ними).
В настоящее время мы пишем DLL, которая установит ловушку на все оконные сообщения и [дальше идёт перечисление ещё более сумасшедших идей, которые не стоят того, чтобы тратить на них время], но сейчас это приводит к вылету других приложений. Мы также рассматриваем возможность установки таймера и вызова
SetWindowPos
по таймеру, но это кажется недостаточным.
Этот клиент не провёл мысленный эксперимент Что если две программы сделают это?; он просто взял и сделал это! Результат был предсказуем: две программы стали бороться друг с другом. Никто не выиграл, обе проиграли — и особенно досталось пользователю.
Ответить
Хотите присоединиться к обсуждению?Не стесняйтесь вносить свой вклад!