Должно быть, было просто, я бы подумал. Я хочу заставить ПК перейти в режим экранной заставки и выйти из него, когда условия, на которые я проверяю D2006), станут реальностью. Он не работает:запуск и остановка заставки
if ScreenSaverExitRequested then
begin
SystemParametersInfoResult := SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, @ScreenSaverIsRunning, 0);
if ScreenSaverIsRunning then
begin
SystemParametersInfoResult := SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, UINT(false), nil, SPIF_SENDWININICHANGE);
end ;
end ;
....
if ScreenSaverEntryRequested then
begin
SystemParametersInfoResult := SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, 1, nil, SPIF_SENDWININICHANGE) ;
end ;
SystemParametersInfoResult возвращает true в каждом случае. Вызов SystemParametersInfo, похоже, не имеет никакого эффекта. Если я поместил ПК в режим SS, используя кнопку «Предварительный просмотр» в диалоговом окне «Свойства экрана панели управления», выполнение моего кода ничего не делает.
Спасибо Реми. Чтобы пойти в другую сторону, есть ли соответствующее сообщение, чтобы выгнать его из режима скринсейвера? В настоящее время я использую 'Keybd_Event (VK_LCONTROL, 1, 0, 0); 'Keybd_Event (VK_LCONTROL, 1, KEYEVENTF_KEYUP, 0); и похоже работает нормально. – rossmcm
Не особо, нет. Вы должны либо подделывать пользовательский ввод, как вы уже делали, либо вам нужно будет найти окно экранной заставки, а затем отправить сообщение WM_CLOSE. См. Этот FAQ: http://msdn.microsoft.com/en-us/magazine/cc301462.aspx. –