Pull to refresh

Уходя, гасите свет (и выключайте музыку). Блокировка компьютера и микшер

Reading time3 min
Views2.7K
Наверное, со всеми такое было — начинаешь интересоваться какой-то определенной темой, и при поиске нужного материала попутно натыкаешься на другой интересный материал и т.д. И начинаешь прыгать по ссылкам с одного сайта на другой. Так произошло недавно и со мной — искал примеры для сообщения 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, который позволяет отслеживать блокировку и разблокировку компьютера. Код очень простой.

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 можно также почитать в моем блоге.
Удачного вам програмиирования!
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+4
Comments9

Articles

Change theme settings