ОБСУЖДЕНИЕ

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

8 ответов 7,9 тыс.
Автор темы
Как поменять звуковую схему 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;
...
}
 
Спасибо. Всё нормально. :) :) :)