すべてはシンプルなものから始まりました。 私は、アーカイブにWindowsメッセージWM_APPCOMMANDを含む例を見つけ、 C#/ VBおよびVisual Basic 6.0のWindows API関数に関する参考書からそれを含めることにしました。 新しい記事の資料を処理するとき、特定のトピックに関する他の例が何であるかをGoogleで判断することにしました。 そして、私が注目した興味深い例が見つかりました。
よく知られているCodeProjectポータルで、記事CodeProject:システムロック後にシステムボリュームをミュートする方法がありました。 無料のソースコードとプログラミングヘルプ 。 これが無料翻訳の記事です(以下、最初の人と呼びます):
私は働いているので、私は1つの良い会社にいます。 そして、私は大きなスピーカーを備えたコンピューターを持っています。 大音量の音楽がスピーカーから流れてくると簡単に動作するので、全力で音をカットします。 私の反対側にいるのは、音楽があまり好きではない同僚です。 そして、私は定期的に空気を吸いに出かけます(つまり、煙ですが、それは私たちの間です)。 また、当社では注文が厳しくなります。職場をしばらく離れる場合は、必ずコンピューターをロックしてください。 そして、そうです。 しかし、1つの問題があります-コンピューターがロックされている場合、サウンドはブロックされず、音楽の再生は継続されます。 私の同僚は、少なくとも私の不在の間は音を消すように頼みました。 もちろん、私は獣ではありません。 しかし、これを手動で行うのは面倒で、ロックされたときにミキサーを自動的にオフにし、ロックが解除されたときにミキサーを再びオンにするユーティリティを作成しました。
ユーティリティの説明はここで終わり、記事の著者はアプリケーションコードを引用します。 .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定数を使用すると、Windows 7で使用されているプログラムからFLIP 3Dモードを呼び出すことができます。ちなみに、Windows 7の販売は今日から始まりました(穏やかに、多くの人が今日このニュースにうんざりしていることを知っています)。
PS WM_APPCOMMANDメッセージの簡単な説明は、 私のブログでも読むことができます。
プログラミングを頑張ってください!