Замена звуковой схемы Windows

  • Автор темы Автор темы EuGenius
  • Дата начала Дата начала
E

EuGenius

Как поменять звуковую схему Windows на
беззвучную("Нет звуков") на время работы программы (или блокировать звуки)?
Помогите, кто знает как реализовать.
Дайте ссылки на подобные статьи.
Благодарю за помощь. :) ;) :)
 
Юзай API-функцию SystemParametersInfo с параметром SPI_SETBEEP
 
Пример есть?
Пробовал так(вроде как отключение бипа):
Код:
SystemParametersInfo(SPI_SETBEEP, false, 0, 0);
А AfxMessageBox() всё равно пищит...
Мне надо перекрыть все звуки Windows, вроде как будто вручную выставить "Нет звуков" в "Звуках и аудиоустройствах" Панели управления. :)
 
Ну тогда вот другой вариант:
Код:
void GetVolume(DWORD& volume)
{
HWAVEOUT hWO;
WAVEFORMATEX waveF;

::ZeroMemory(&waveF, sizeof(WAVEFORMATEX));
waveOutOpen(&hWO, WAVE_MAPPER, &waveF, 0, 0, 0);
waveOutGetVolume(hWO, &volume);
waveOutClose(hWO);
};

void SetVolume(DWORD volume)
{
HWAVEOUT hWO;
WAVEFORMATEX waveF;

::ZeroMemory(&waveF, sizeof(WAVEFORMATEX));
waveOutOpen(&hWO, WAVE_MAPPER, &waveF, 0, 0, 0);
waveOutSetVolume(hWO, volume); 
waveOutClose(hWO);
};
С помощью GetVolume(vol) получаем текущую громкость, с помощью SetVolume(0), отключаем звук, с помощью SetVolume(vol) включаем звук, который был до отключения.
В модуль подключаем #include <Mmsystem.h> и в проект подключаем библиотеку Winmm.lib
И да будет тебе счастье :)
 
Спасибо, всё получилось.
Как сделать функции(методы) и переменные доступными в модуле, обьявленные в классе? (C++)
Пришлось обьявлять данные функции и переменную звука глобальными.
Пробовал static, но линкер выдает ошибку
Unresolved external
 
Все должно работать в классе. Код в студию.
 
Сделал так (глобально):
Код:
DWORD dwSystemVolume;//текущая громкость системы

//Global functions
void GetVolume(DWORD& volume)//gets System volume
{
HWAVEOUT hWO;
WAVEFORMATEX waveF;

::ZeroMemory(&waveF, sizeof(WAVEFORMATEX));
waveOutOpen(&hWO, WAVE_MAPPER, &waveF, 0, 0, 0);
waveOutGetVolume(hWO, &volume);
waveOutClose(hWO);
};

void SetVolume(DWORD volume)//sets System volume
{
HWAVEOUT hWO;
WAVEFORMATEX waveF;

::ZeroMemory(&waveF, sizeof(WAVEFORMATEX));
waveOutOpen(&hWO, WAVE_MAPPER, &waveF, 0, 0, 0);
waveOutSetVolume(hWO, volume); 
waveOutClose(hWO);
};



Проблема со статиком может быть, если сразу проект делался под VC++6,
а потом под MSVS2003 .NET ?
Обьявление
Код:
class CBellvisualDlg : public CDialog
{
...
public:	
static bool isAboutExisted;
...
};
Использование
Код:
BOOL CBellvisualDlg::OnInitDialog()
{
...
CBellvisualDlg::isAboutExisted = false;
...
}

При линковке ошибка:
Bellvisual error LNK2001: unresolved external symbol "public: static bool CBellvisualDlg::isAboutExisted" (?isAboutExisted@CBellvisualDlg@@2_NA)

Если строку закомментировать
//CBellvisualDlg::isAboutExisted = true;
То ошибки нет.
 
В файле реализации (*.cpp) переобъяви статическую переменную:
Код:
bool CBellvisualDlg::isAboutExisted;
......
......

BOOL CBellvisualDlg::OnInitDialog()
{
...
CBellvisualDlg::isAboutExisted = false;
...
}
 
Спасибо. Всё нормально. :) :) :)
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab