У меня есть служба Windows, которая может изменить тайм-аут на заставке входа в Windows Чтобы сделать это изменить следующий раздел реестра на тайм-аут в секундах (как described here.):Как обновить параметры параметров заставки заставки?
HKEY_USERS\.DEFAULT\Control Panel\Desktop\ScreenSaveTimeOut
Вопрос заключается в том, что, как я делаю OS «read» или обновить фактический тайм-аут заставки после изменения в разделе реестра выше?
Моя практика показывает, что она обновлена (конечно) только при перезагрузке системы, но в моем случае мне нужно, чтобы она была применена без перезагрузки.
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 как результат от обоих звонки, но это не имеет никакого эффекта.
Я попробовал ваше предложение ..., пожалуйста, проверьте мой скорректированный вопрос. У вас есть идея, с какими флагами можно позвонить? – c00000fd
Ваш код работает как SYSTEM? Если нет, функция будет успешной, но переменная 'bsmInfo1', которую функция обновляет, чтобы указать, кто получил это сообщение, не содержит флаг' BSM_ALLDESKTOPS'. Какую ценность вы получаете в 'bsmInfo1'? – arx
И wParam и lParam должны быть 'SPI_SETSCREENSAVETIMEOUT' и" "соответственно, то есть' int nbsm = :: BroadcastSystemMessage (dwFlgs, & bsmInfo, WM_SETTINGCHANGE, SPI_SETSCREENSAVETIMEOUT, (LPARAM) L ""); '. – arx