Базовый регулятор громкости C#
Microsoft Windows позволяет изменять или отключать громкость системного звука с помощью экранных элементов управления. Этот программный элемент управления может использоваться в приложениях .NET для увеличения или уменьшения громкости или для полного отключения звука компьютера.
Функция SendMessage API
В некоторых проектах может быть полезно добавить регулятор громкости. В простейших случаях может потребоваться разрешить пользователю поэтапно увеличивать или уменьшать громкость или полностью отключать звук компьютера. Когда этот уровень контроля достаточен, вы можете включить его в свое программное обеспечение с помощью единой функции Windows API, называемой "SendMessage".
SendMessage позволяет синхронно отправлять простые сообщения в определенные окна. Эта функция имеет широкий спектр различных применений. В этой статье мы будем использовать его для изменения основного уровня громкости операционной системы. Поскольку это функция API Windows, доступ к ней необходимо осуществлять с помощью служб вызова платформы (P/Invoke). Чтобы упростить доступ к атрибутам P/Invoke, добавьте в свой код следующую директиву using:
using System.Runtime.InteropServices;С помощью директивы using мы можем добавить ссылку на внешнюю функцию, добавив приведенный ниже код.
[DllImport("user32.dll")] static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);Функция SendMessage имеет четыре параметра и возвращает значение IntPtr. Возвращаемое значение содержит дескриптор окна, когда это необходимо. При изменении громкости возвращаемое значение не требуется. Параметры:
- hWnd. Указывает дескриптор окна, в которое вы хотите отправить сообщение. При изменении громкости этот параметр можно установить на дескриптор текущего окна.
- Msg. Определяет тип сообщения, которое должно быть отправлено.
- wParam/lParam. Последние два параметра позволяют отправлять дополнительную информацию вместе с сообщением. Мы будем использовать аргумент lParam, чтобы указать тип изменения громкости, которое мы хотим внести. Нам не нужно использовать wParam, поэтому мы передадим ему фиктивное значение.
Сообщение, которое нам нужно предоставить для отправки сообщения, и значения дополнительной информации являются предопределенными целочисленными кодами. Чтобы сделать исходный код более читабельным, вы должны определить именованные константы для этих значений. Сообщение об увеличении, уменьшении или уменьшении громкости всегда одно и то же. Он называется WM_APPCOMMAND и должен быть определен следующим образом:
const int WM_APPCOMMAND = 0x319;Три дополнительные константы определяют дополнительную информацию для сообщения. Они определяют, какое действие по регулированию громкости будет выполнено:
const int APPCOMMAND_VOLUME_MUTE = 0x80000; const int APPCOMMAND_VOLUME_DOWN = 0x90000; const int APPCOMMAND_VOLUME_UP = 0xA0000;Изменение громкости
С помощью определенной функции и констант мы можем вызвать SendMessage. Первый пример кода отключает громкость или восстанавливает ее до прежнего уровня, если она уже отключена. Обратите внимание, что в качестве первого аргумента передается свойство Handle текущего окна. Это предполагает, что код вызывается из кода за окном. Если вы включаете функцию в библиотеку, вы должны предоставить средство для предоставления подходящего дескриптора. Обратите также внимание на использование фиктивного нулевого значения для аргумента wParam.
SendMessage(this.Handle, WM_APPCOMMAND, IntPtr.Zero, (IntPtr)APPCOMMAND_VOLUME_MUTE);Чтобы увеличить громкость, сделайте вызов. Громкость будет увеличиваться на небольшую величину с каждым вызовом, пока не будет достигнут максимальный уровень.
SendMessage(this.Handle, WM_APPCOMMAND, IntPtr.Zero, (IntPtr)APPCOMMAND_VOLUME_UP);Наконец, чтобы уменьшить громкость, используйте приведенный ниже код:
SendMessage(this.Handle, WM_APPCOMMAND, IntPtr.Zero, (IntPtr)APPCOMMAND_VOLUME_DOWN);
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.