Отключите и включите экранную заставку в Windows 7

У меня есть приложение, чем отключает экранную заставку временно для выполнения показа слайдов. Я использую это для включения или выключения его:

i = SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, active, Nothing, SPIF_SENDWININICHANGE)

Это хорошо работает в XP. В Windows 7 это отключает экранную заставку правильно. Однако, когда это позволено снова в нормальное время для экранной заставки продвинуться, система просит пароль вместо того, чтобы показать экранную заставку.

С этого времени на, пока настройки экранной заставки не корректируются в панели управления, экран пароля отображен вместо экранной заставки.

Есть ли что-то еще, что я должен делать для Windows 7? Я понимаю, что SPI_GETSCREENSAVEACTIVE не поддерживается в Windows 7, но SPI_SETSCREENSAVEACTIVE, как предполагается.

5
задан xpda 18 January 2010 в 19:26
поделиться

2 ответа

Решение состоит в том, чтобы изменить значение реестра HKCU \ Control \ Desktop ScreensaveActive key вместо использования SystemParameterSinfo. Это работает как в XP, так и Windows 7.

Call Registry.SetValue("HKEY_CURRENT_USER\Control Panel\Desktop", "ScreenSaveActive", "1")
5
ответ дан 14 December 2019 в 01:08
поделиться

То, что я сделал раньше в этой ситуации, не отключает заставку, но для предотвращения запуска заставки. Для этого я периодически (на таймере) отправляю нажатие клавиши «левый сдвиг» в ОС.

C #:

[DllImport("user32")]
private static extern void keybd_event(byte bVirtualKey, byte bScanCode, int dwFlags, int dwExtraInfo);

private const byte VK_LSHIFT = 0xA0;
private const int KEYEVENTF_KEYUP = 0x0002;

// When the timer elapses, send Left Shift Up
private void timer1_Tick(object sender, EventArgs e)
{
    keybd_event(VK_LSHIFT, 0x45, KEYEVENTF_KEYUP, 0);
}

VB.NET:

Private Const VK_LSHIFT As Byte = 160

Private Const KEYEVENTF_KEYUP As Integer = 2

Private Declare Sub keybd_event Lib "user32" (ByVal bVirtualKey As Byte, ByVal bScanCode As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)

' When the timer elapses, send Left Shift Up
Private Sub timer1_Tick(ByVal sender As Object, ByVal e As EventArgs)
    keybd_event(VK_LSHIFT, 69, KEYEVENTF_KEYUP, 0)
End Sub

(я не разработчик VB, я просто запустил код C # через автоматизированный C # -> VB.NET Converter)

Я полагаю, что левый сдвиг Up keystroke - наименее вероятность вмешиваться в приложение. Худшее, что может произойти, это то, что если, точно так же, что таймер пожали, у вас есть левый сдвиг вниз, он приведет к концу сдвига.

Вы можете, конечно, использовать любой другой ключ, чтобы сохранить задержку с активацией.

4
ответ дан 14 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: