Как обновить изменения параметров заставки входа?

У меня есть служба Windows, которая может изменить время ожидания на заставке входа в Windows (как описано здесь.) Для этого я изменяю следующий ключ реестра на время ожидания в секундах:

HKEY_USERS\.DEFAULT\Control Panel\Desktop\ScreenSaveTimeOut

Вопрос в том, как заставить ОС «читать» или обновление фактическое время ожидания заставки после изменения в разделе реестра выше?

Моя практика показывает, что он обновляется (наверняка) только при перезагрузке системы, но в моем случае его нужно применить без перезагрузки.

EDIT_1: После предложенного ниже предложения я попробовал, как мне кажется, все возможные комбинации флагов для следующего:

DWORD bsmInfo1 = BSM_ALLDESKTOPS;
DWORD dwFlgs = BSF_FORCEIFHUNG | BSF_IGNORECURRENTTASK | BSF_NOTIMEOUTIFNOTHUNG | BSF_SENDNOTIFYMESSAGE;
int nbsm1 = ::BroadcastSystemMessage(dwFlgs, &bsmInfo1, WM_SETTINGCHANGE, 0, (LPARAM)L"Windows");
DWORD bsmInfo2 = BSM_ALLDESKTOPS;
int nbsm2 = ::BroadcastSystemMessage(dwFlgs, &bsmInfo2, WM_SETTINGCHANGE, 0, (LPARAM)L"WindowsThemeElement");

безрезультатно 🙁 Я получаю 1 в результате обоих вызовов, но это не имеет никакого эффекта.

2

Решение

я мог решить это.-.-.

1

Другие решения

Если ваша служба работает в том же сеансе, что и заставка входа, вы можете позвонить SystemParametersInfo с SPI_SETSCREENSAVETIMEOUT флаг.

SystemParametersInfo транслирует WM_SETTINGCHANGE сообщение всем окнам верхнего уровня, чтобы указать, что параметр изменился. Если ваш код не работает в правильном сеансе, вы можете использовать BroadcastSystemMessage с BSM_ALLDESKTOPS флаг для доставки WM_SETTINGCHANGE сообщение. Тем не менее, это требует SE_TCB_NAME привилегия, поэтому ваш код должен быть запущен как SYSTEM.

На самом деле я не пробовал эту кросс-сессию, поэтому я не могу гарантировать, что она работает.

0

По вопросам рекламы [email protected]