Функция SystemParametersInfo даёт вам доступ к различным настройкам пользовательского интерфейса, и это единственный поддерживаемый официально способ получить эти настройки.
Я не буду рассматривать каждую опцию; идите и прочитайте сами. Вот несколько примеров:
- SPI_GETICONTITLELOGFONT позволяет вам узнать шрифт, который используется для подписей к иконкам; SPI_SETICONTITLELOGFONT позволяет вам установить его.
- SPI_GETNONCLIENTMETRICS позволяет вам запросить шрифты, которые используются в заголовках окон, меню, строках статуса и сообщениях; SPI_SETNONCLIENTMETRICS позволяет вам сменить их.
- SPI_SETKEYBOARDDELAY и SPI_SETKEYBOARDSPEED позволяют вам сменить настройки авто-повтора клавиш клавиатуры.
- SPI_SETDOUBLECLICKTIME позволяет вам сменить скорость двойного щелчка.
- SPI_SETMENUFADE позволяет вам включить или отключить анимацию выпадения меню.
- Есть целая серия настроек SPI_SETxxxANIMATION, которые позволяют вам контролировать анимацию различных элементов экрана.
Тот факт, что у нас существуют как временные, так и постоянные установки, указывает на опасности прямого чтения настроек из реестра. Если текущие настройки являются временными, то они не сохраняются в профиль пользователя (реестр). Функция SystemParametersInfo получает текущие установки, даже если они временные. Например, если вы хотите узнать, анимированы ли меню, а пользователь временно отключил анимацию, то чтение реестра скажет вам, что они являются анимированными, когда в действительности они не анимированы.
Далее, запись настроек в реестр не активирует их до следующей загрузки профиля, потому что это именно то время, когда настройки читаются из реестра. Чтобы применить настройки сразу - вы должны использовать SystemParametersInfo.
Это по-прежнему удивляет меня: почему люди используют недокументированные ключи реестра, когда есть отличный документированный способ для этого. Особенно, когда документированный способ действительно работает, а недокументированный способ - не всегда.
Я помню одно приложение, которое шло напрямую в реестр за недокументированным ключом реестра (я думаю, для получения шрифта заголовка иконки). К несчастью для этого приложения, формат ключа реестра был изменён между Windows 95 и Windows 2000, так что приложение стало вылетать (оно ожидало формат Windows 95). Если бы оно использовало документированный способ получения шрифта, то оно бы продолжило работать, и ему было бы плевать на внутренние изменения реестра. Другими словами, эта программа обошла предпочтительный способ делать вещи, только для того, чтобы загнать саму себя в ловушку.
Много полезных настроек можно также получить с помощью функции GetSystemMetrics.
ОтветитьУдалитьЕще и SHGetSettings
ОтветитьУдалить