Как программно запустить скрин сейвер?
Версия текста: 1.0
Как известно, в Windows существуют системные команды (system commands), которые поступают в окно в виде сообщения WM_SYSCOMMAND. Идентификатор конкретной команды размещается в параметре wParam. Существуют команды SC_MOVE (перемещение окна), SC_SIZE (масштабирование окна) и т. д. Все эти команды "умеет" обрабатывать стандартная оконная процедура DefWindowProc, нужно только вызвать её с соответствующими параметрами.
Теперь осталось рассказть, что в Windows существует команда SC_SCREENSAVE, инициирующая запуск выбранного пользователем скрин сейвера. Всё, что тербуется от нас - это передать эту команду в оконную процедуру. Для этой цели можно послать собственному окну сообщение WM_SYSCOMMAND, а можно даже вызвать DefWindowProc напрямую, например:
PostMessage(hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
|
или:
DefWindowProc(hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
|
В MFC указанные операции выполняются совершенно аналогично:
PostMessage(WM_SYSCOMMAND, SC_SCREENSAVE);
|
или:
DefWindowProc(WM_SYSCOMMAND, SC_SCREENSAVE, 0);
|
Осталось выяснить, что делать, если наше приложение вообще не создаёт окно. Оказывается, сгодится и окно рабочего стола (получить его HWND можно с помощью функции GetDesktopWindow), например:
::DefWindowProc(GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
|
Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы
то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских
прав.