C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как программно запустить скрин сейвер? / FAQs / Visual C++

Как программно запустить скрин сейвер?

Автор: Александр Шаргин

Версия текста: 1.0

Как известно, в Windows существуют системные команды (system commands), которые поступают в окно в виде сообщения WM_SYSCOMMAND. Идентификатор конкретной команды размещается в параметре wParam. Существуют команды SC_MOVE (перемещение окна), SC_SIZE (масштабирование окна) и т. д. Все эти команды "умеет" обрабатывать стандартная оконная процедура DefWindowProc, нужно только вызвать её с соответствующими параметрами.

Теперь осталось рассказть, что в Windows существует команда SC_SCREENSAVE, инициирующая запуск выбранного пользователем скрин сейвера. Всё, что тербуется от нас - это передать эту команду в оконную процедуру. Для этой цели можно послать собственному окну сообщение WM_SYSCOMMAND, а можно даже вызвать DefWindowProc напрямую, например:


  
// hWnd - дескриптор окна
PostMessage(hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0);

или:


  
// hWnd - дескриптор окна
DefWindowProc(hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0); 

В MFC указанные операции выполняются совершенно аналогично:


  
// используем CWnd::PostMessage
PostMessage(WM_SYSCOMMAND, SC_SCREENSAVE);

или:


  
// используем CWnd::DefWindowProc
DefWindowProc(WM_SYSCOMMAND, SC_SCREENSAVE, 0);

Осталось выяснить, что делать, если наше приложение вообще не создаёт окно. Оказывается, сгодится и окно рабочего стола (получить его HWND можно с помощью функции GetDesktopWindow), например:


  
::DefWindowProc(GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);

http://www.rsdn.ru/

-->