• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

EuGenius

Как поменять звуковую схему Windows на
беззвучную("Нет звуков") на время работы программы (или блокировать звуки)?
Помогите, кто знает как реализовать.
Дайте ссылки на подобные статьи.
Благодарю за помощь. :) ;) :)
 
Z

zubr

Юзай API-функцию SystemParametersInfo с параметром SPI_SETBEEP
 
E

EuGenius

Пример есть?
Пробовал так(вроде как отключение бипа):
Код:
SystemParametersInfo(SPI_SETBEEP, false, 0, 0);
А AfxMessageBox() всё равно пищит...
Мне надо перекрыть все звуки Windows, вроде как будто вручную выставить "Нет звуков" в "Звуках и аудиоустройствах" Панели управления. :)
 
Z

zubr

Ну тогда вот другой вариант:
Код:
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
И да будет тебе счастье :)
 
E

EuGenius

Спасибо, всё получилось.
Как сделать функции(методы) и переменные доступными в модуле, обьявленные в классе? (C++)
Пришлось обьявлять данные функции и переменную звука глобальными.
Пробовал static, но линкер выдает ошибку
Unresolved external
 
Z

zubr

Все должно работать в классе. Код в студию.
 
E

EuGenius

Сделал так (глобально):
Код:
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;
То ошибки нет.
 
Z

zubr

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

BOOL CBellvisualDlg::OnInitDialog()
{
...
CBellvisualDlg::isAboutExisted = false;
...
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!