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

Тема в разделе "MS Visual C++", создана пользователем EuGenius, 28 янв 2007.

  1. EuGenius

    EuGenius Гость

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

    zubr Гость

    Репутация:
    0
    Юзай API-функцию SystemParametersInfo с параметром SPI_SETBEEP
     
  3. EuGenius

    EuGenius Гость

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

    zubr Гость

    Репутация:
    0
    Ну тогда вот другой вариант:
    Код (Text):
    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
    И да будет тебе счастье :)
     
  5. EuGenius

    EuGenius Гость

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

    zubr Гость

    Репутация:
    0
    Все должно работать в классе. Код в студию.
     
  7. EuGenius

    EuGenius Гость

    Репутация:
    0
    Сделал так (глобально):
    Код (Text):
    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 ?
    Обьявление
    Код (Text):
    class CBellvisualDlg : public CDialog
    {
    ...
    public:
    static bool isAboutExisted;
    ...
    };
    Использование
    Код (Text):
    BOOL CBellvisualDlg::OnInitDialog()
    {
    ...
    CBellvisualDlg::isAboutExisted = false;
    ...
    }
    При линковке ошибка:
    Bellvisual error LNK2001: unresolved external symbol "public: static bool CBellvisualDlg::isAboutExisted" (?isAboutExisted@CBellvisualDlg@@2_NA)

    Если строку закомментировать
    //CBellvisualDlg::isAboutExisted = true;
    То ошибки нет.
     
  8. zubr

    zubr Гость

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

    BOOL CBellvisualDlg::OnInitDialog()
    {
    ...
    CBellvisualDlg::isAboutExisted = false;
    ...
    }
     
  9. EuGenius

    EuGenius Гость

    Репутация:
    0
    Спасибо. Всё нормально. :) :) :)
     
Загрузка...

Поделиться этой страницей