MessageBox с чекбоксом "Больше не показывать"
Еще одна хорошая практика взаимодействия с пользователем - окно сообщения с чекбоксом "Больше не показывать это диалоговое окно". Таким образом и приложение выполняет свою работу по уведомлению пользователя о каком-то периодическом событии, и пользователь сам решает, желает ли он наблюдать это уведомление в дальнейшем. Делается это при помощи стандартной функции SHMessageBoxCheck. По параметрам эта функция очень похожа на вызов MessageBox, но поддерживает ограниченное количество стилей и не весь набор кнопок, а также обязательно требует текстовую строку с уникальным идентификатором этого сообщения. В остальном все сводится к единственному вызову, типа такого:Code (Assembler) : Убрать нумерацию
- ; Уникальный идентификатор окна сообщения
- szUID db '{D9108BA3-9A61-4398-BFBC-B02102C77E8A}',0
- ...
- ; Значение по умолчанию
- DEFAULT_RESULT = 0
- ; Вывести окно сообщения с галочкой "Больше не показывать"
- invoke SHMessageBoxCheck,HWND_DESKTOP,\
- szMess,szTitle,MB_YESNO+MB_ICONEXCLAMATION,\
- DEFAULT_RESULT,szUID
- ; EAX = выбранная кнопка или DEFAULT_RESULT
Чтобы сообщение снова могло отображаться, надо просто удалить соответствующий параметр из реестра или изменить его значение с "NO" на любое другое. Но во втором случае это значение почему-то фиксируется и больше не меняется, сколько бы пользователь ни ставил галочку "Не показывать".
Несмотря на то, что на сайте MSDN для этой функции заявлена поддержка Windows XP, фактически это не так. Для использования SHMessageBoxCheck требуется Windows Vista и выше. Если требуется обратная совместимость, то надо будет проверять доступность этой функции и для более старых операционных систем придется использовать обычный MessageBox.
В приложении пример программы с исходным текстом, которая выводит окно сообщения с чекбоксом "Больше не показывать это диалоговое окно", а также пакетный файл для сброса записи в реестре для этого окна.
Просмотров: 1083 | Комментариев: 6
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(07.10.2021 в 10:33):
Значит в MSDN в очередной раз ошиблись. Дописал в статью абзац про поддержку.
voffka
(07.10.2021 в 09:00):
В sp3 тоже не будет работать. Последняя поддерживаемая хр shlwapi это 6.0.2900, в ней нету SHMessageBoxCheck. Следующая 6.0.6001 уже требует новый kernel32
user
(07.10.2021 в 01:53):
На нескольких машинах эта система уже закатана в образы, больше десяти лет назад, - семёрку на них тулить глупо, а возиться с обновлением SP2 до SP3.. Ещё более глупо.
Выбрал просто для себя некие стандартные требования к софту.
И как-то получается, что если софт общего назначения не запускается в XP/SP2, то уже это одно служит показателем некоторой его говённости.
То есть раз автар не удосужился обеспесить совместимость "вниз", то он не удосужился сделать и ещё многое другое, без чего софт считаться удобным не может.
Статистика.
Приятно удивляет в этом смысле ТоталКоммандер, последние версии которого нормально работают также и в Win9x. Невольно зауважал. - Это одна из редких программ на Паскале, которая внушает
А вот Hiew в этом смысле изговнился, сейчас требует минимум WinXP.
Выбрал просто для себя некие стандартные требования к софту.
И как-то получается, что если софт общего назначения не запускается в XP/SP2, то уже это одно служит показателем некоторой его говённости.
То есть раз автар не удосужился обеспесить совместимость "вниз", то он не удосужился сделать и ещё многое другое, без чего софт считаться удобным не может.
Статистика.
Приятно удивляет в этом смысле ТоталКоммандер, последние версии которого нормально работают также и в Win9x. Невольно зауважал. - Это одна из редких программ на Паскале, которая внушает
А вот Hiew в этом смысле изговнился, сейчас требует минимум WinXP.
user
(07.10.2021 в 01:29):
Привычка. Ну, и SoftICE тоже, бывает.
ManHunter
(07.10.2021 в 00:10):
При всей моей любви к старым системам, позволю себе поворчать. Большинство самой мякотки добавили в SP3. В чем необходимость SP2? SoftICE?
user
(07.10.2021 в 00:02):
Использование таких "удобняшек" это самый лёгкий способ получить непортабельное приложение.
Пример из этой статьи у меня на WinXP/SP2 не запустился, система сообщила,
что функция SHMessageBoxCheckA не найдена.
Несмотря на то, что работа в WinXP была заявлена.
Пример из этой статьи у меня на WinXP/SP2 не запустился, система сообщила,
что функция SHMessageBoxCheckA не найдена.
Несмотря на то, что работа в WinXP была заявлена.
Добавить комментарий
Заполните форму для добавления комментария