Наверное, со всеми такое было — начинаешь интересоваться какой-то определенной темой, и при поиске нужного материала попутно натыкаешься на другой интересный материал и т.д. И начинаешь прыгать по ссылкам с одного сайта на другой. Так произошло недавно и со мной — искал примеры для сообщения WM_APPCOMMAND, и вдобавок узнал, что в .NET Framework есть классы для работы с сеансами пользователя.
А началось все с простого. Нашел я в своих архивах пример с сообщением Windows WM_APPCOMMAND и решил включить его с свои справочники по функциям Windows API для C#/VB и Visual Basic 6.0. При обработке материала для новой статьи решил я погуглить, какие еще примеры есть на заданную тему. И нашел я интересный пример, который привлек мое внимание.
На известном портале CodeProject нашлась статья CodeProject: How to mute the system volume after system lock. Free source code and programming help. Вот как выглядит статья в вольном переводе (далее от первого лица):
Работаю, значит, я в одной хорошей компании. И есть у меня компьютер с большими колонками. Мне легче работается, когда из колонок льется громкая музыка, поэтому я врубаю звук на полную мощность. А напротив меня сидит мой коллега, который не очень любит музыку. А еще я периодически выхожу подышать воздухом (т.е. покурить, но это между нами). А у нас в компании порядки строгие — если покидаешь на время рабочее место, то обязательно блокируй компьютер. И это правильно. Но, есть одна проблема — при блокировке компьютера звук не блокируется и музыка продолжает играть. Мой коллега попросил, чтобы хотя бы на время моего отсутствия, я выключал звук. Я же не зверь, конечно, выключу. Но вручную делать это лениво, и тогда я написал утилитку, которая автоматически выключает микшер при блокировке и снова включает его при разблокировке.
На этом описание утилиты заканчивается и дальше автор статьи приводит код приложения. Оказывается, в .NET Framework есть событие SystemEvents.SessionSwitch, который позволяет отслеживать блокировку и разблокировку компьютера. Код очень простой.
Честно признаюсь, что не знал о данном событии. Но меня удивили порядки в компании. У нас в офисе те люди, которые привыкли работать под музыку, надевают наушники и не мешают окружающим. С трудом представляю ситуацию, чтобы кто-то пользовался колонками. А у вас?
Между прочим, идея выключения микшера мне показалась неверной. В сообщении WM_APPCOMMAND имеется такой параметр как APPCOMMAND_MEDIA_PLAY_PAUSE, который позволяет поставить на паузу проигрыватель. Правда, это сработает для Windows Media Player и вряд ли для Winamp и ему подобных проигрывателей. Но если слушаете музыку в универсальном проигрывателе Windows, то возьмите на заметку.
Кстати, о сообщении WM_APPCOMMAND. При помощи константы APPCOMMAND_DWM_FLIP3D можно из своей программы вызвать режим FLIP 3D, который используется в Windows 7. Между прочим, сегодня начались продажи Windows 7 (спокойно, я знаю, что многим из вас эта новость сегодня уже порядком надоела).
P.S. Краткое описание сообщения WM_APPCOMMAND можно также почитать в моем блоге.
Удачного вам програмиирования!
А началось все с простого. Нашел я в своих архивах пример с сообщением Windows WM_APPCOMMAND и решил включить его с свои справочники по функциям Windows API для C#/VB и Visual Basic 6.0. При обработке материала для новой статьи решил я погуглить, какие еще примеры есть на заданную тему. И нашел я интересный пример, который привлек мое внимание.
На известном портале CodeProject нашлась статья CodeProject: How to mute the system volume after system lock. Free source code and programming help. Вот как выглядит статья в вольном переводе (далее от первого лица):
Работаю, значит, я в одной хорошей компании. И есть у меня компьютер с большими колонками. Мне легче работается, когда из колонок льется громкая музыка, поэтому я врубаю звук на полную мощность. А напротив меня сидит мой коллега, который не очень любит музыку. А еще я периодически выхожу подышать воздухом (т.е. покурить, но это между нами). А у нас в компании порядки строгие — если покидаешь на время рабочее место, то обязательно блокируй компьютер. И это правильно. Но, есть одна проблема — при блокировке компьютера звук не блокируется и музыка продолжает играть. Мой коллега попросил, чтобы хотя бы на время моего отсутствия, я выключал звук. Я же не зверь, конечно, выключу. Но вручную делать это лениво, и тогда я написал утилитку, которая автоматически выключает микшер при блокировке и снова включает его при разблокировке.
На этом описание утилиты заканчивается и дальше автор статьи приводит код приложения. Оказывается, в .NET Framework есть событие SystemEvents.SessionSwitch, который позволяет отслеживать блокировку и разблокировку компьютера. Код очень простой.
private void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
//If the reason for the session switch is lock or unlock
//send the message to mute or unmute the system volume
if (e.Reason == SessionSwitchReason.SessionLock)
{
SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
(IntPtr)APPCOMMAND_VOLUME_MUTE);
}
else if (e.Reason == SessionSwitchReason.SessionUnlock)
{
SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
(IntPtr)APPCOMMAND_VOLUME_MUTE);
}
}
Честно признаюсь, что не знал о данном событии. Но меня удивили порядки в компании. У нас в офисе те люди, которые привыкли работать под музыку, надевают наушники и не мешают окружающим. С трудом представляю ситуацию, чтобы кто-то пользовался колонками. А у вас?
Между прочим, идея выключения микшера мне показалась неверной. В сообщении WM_APPCOMMAND имеется такой параметр как APPCOMMAND_MEDIA_PLAY_PAUSE, который позволяет поставить на паузу проигрыватель. Правда, это сработает для Windows Media Player и вряд ли для Winamp и ему подобных проигрывателей. Но если слушаете музыку в универсальном проигрывателе Windows, то возьмите на заметку.
Кстати, о сообщении WM_APPCOMMAND. При помощи константы APPCOMMAND_DWM_FLIP3D можно из своей программы вызвать режим FLIP 3D, который используется в Windows 7. Между прочим, сегодня начались продажи Windows 7 (спокойно, я знаю, что многим из вас эта новость сегодня уже порядком надоела).
P.S. Краткое описание сообщения WM_APPCOMMAND можно также почитать в моем блоге.
Удачного вам програмиирования!