Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Остановить запущенный скринсейвер


Автор: RedCliphAloe 5.3.2014, 09:10
Здравствуйте.
Подскажите, пожалуйста, если кто-то сталкивался с подобным.

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

Есть программа. Запущена постоянно на терминале с тачскрином под Windows 7.
Пока она простаивает - вылазит скринсейвер.
Когда пользователь взаимодействует со считывающим устройством терминала, программа начинает функционировать, но на экране болтается скринсейвер, который убирается только после нажатия на экран. А мне нужно закрыть его программно.
Следующие варианты не помогли:
Код

    // Убрать заставку.
    // 1 способ
    keybd_event(1, 0, KEYEVENTF_KEYUP, 0);
    // 2 способ
    PostMessage(FormMain.Handle, WM_KEYUP, 0, 0);
    // 3 способ
    if GetActiveWindow <> FormMain.Handle then
      PostMessage(GetActiveWindow(), WM_CLOSE, 0, 0);

Автор: -Сергей- 22.4.2014, 11:16
имхо надо юзать GetForegroundWindow

Автор: Romikgy 22.4.2014, 11:37
еще способ , узнать из реестра какой скринсейвер активный и в процессах его грохнуть 

Автор: kami 22.4.2014, 17:01
А я бы предложил вообще запретить запуск скринсейвера при запущенной своей программе.
не подумал, что скринсейвер может быть действительно нужным, так что всякие SetThreadExecutionState не актуальны...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)