Как воспроизвести звук?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 13.07.11 11:52
Оценка:
Как воспроизвести звук, который обычно винда воспроизводит при появлении тултипа в трее (эдакий "бульк")? Понятно, что это какой-то алиас вообще, но какой?
Куда копать вообще?
Aml Pages Home
Re: Как воспроизвести звук?
От: nicestep Россия  
Дата: 13.07.11 13:57
Оценка: 9 (2)
Здравствуйте, Carc, Вы писали:

C>Как воспроизвести звук, который обычно винда воспроизводит при появлении тултипа в трее (эдакий "бульк")? Понятно, что это какой-то алиас вообще, но какой?

C>Куда копать вообще?

Копать необходимо в сторону PlaySound. Находим описание флага SND_ALIAS:

SND_ALIAS The pszSound parameter is a system-event alias in the registry or the WIN.INI file. Do not use with either SND_FILENAME or SND_RESOURCE.

А ниже пример:

The following example plays a system-event sound:

PlaySound(TEXT("SystemStart"), NULL, SND_ALIAS);

Открываем Панель управления — Звуки и аудиоустройства — Звуки, ищем звук "Системное уведомление". То, что нужно. Запускаем regedit.exe, ищем в реестре "SystemStart", рядом находим описание алиаса — "SystemNotification":
PlaySound(TEXT("SystemNotification"), NULL, SND_ALIAS);
Re: Как воспроизвести звук?
От: LGB Канада  
Дата: 13.07.11 16:47
Оценка:
Здравствуйте, Carc, Вы писали:

C>Как воспроизвести звук, который обычно винда воспроизводит при появлении тултипа в трее (эдакий "бульк")? Понятно, что это какой-то алиас вообще, но какой?

C>Куда копать вообще?

MessageBeep?
Re[2]: Как воспроизвести звук?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 13.07.11 16:53
Оценка:
Здравствуйте, LGB, Вы писали:

LGB>Здравствуйте, Carc, Вы писали:


C>>Как воспроизвести звук, который обычно винда воспроизводит при появлении тултипа в трее (эдакий "бульк")? Понятно, что это какой-то алиас вообще, но какой?

C>>Куда копать вообще?

LGB>MessageBeep?

Насколько я понимаю, MessageBeep способен воспроизводить весьма ограниченное число звуков (те, которые можно настроить для MessageBox) и только!?!
Aml Pages Home
Re[3]: Как воспроизвести звук?
От: kero Россия  
Дата: 13.07.11 18:35
Оценка:
Здравствуйте, Carc, Вы писали:

C>>>Как воспроизвести звук, который обычно винда воспроизводит при появлении тултипа в трее (эдакий "бульк")? Понятно, что это какой-то алиас вообще, но какой?

C>>>Куда копать вообще?

LGB>>MessageBeep?

C>Насколько я понимаю, MessageBeep способен воспроизводить весьма ограниченное число звуков (те, которые можно настроить для MessageBox) и только!?!

Beep по-круче: частота и длительность.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[4]: Как воспроизвести звук?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 13.07.11 18:44
Оценка:
Здравствуйте, kero, Вы писали:

K>Здравствуйте, Carc, Вы писали:


C>>>>Как воспроизвести звук, который обычно винда воспроизводит при появлении тултипа в трее (эдакий "бульк")? Понятно, что это какой-то алиас вообще, но какой?

C>>>>Куда копать вообще?

LGB>>>MessageBeep?

C>>Насколько я понимаю, MessageBeep способен воспроизводить весьма ограниченное число звуков (те, которые можно настроить для MessageBox) и только!?!

K>Beep по-круче: частота и длительность.

А "композитора" где взять!?!
И потом, ну не городить же огород из-за такой мелочи? Делов-то "булькнуть" таким же "ушлепком" как и SystemNotification: ибо у меня именно схожий, но собственный ballon tooltip и всплывает (правда, не в трее). Мысль простая: тот же звук, к которому пользователь уже и так привык, тот же самый — стандартный.
Aml Pages Home
Re[5]: Как воспроизвести звук?
От: LGB Канада  
Дата: 13.07.11 19:48
Оценка:
Здравствуйте, Carc, Вы писали:

C>А "композитора" где взять!?!

C>И потом, ну не городить же огород из-за такой мелочи? Делов-то "булькнуть" таким же "ушлепком" как и SystemNotification: ибо у меня именно схожий, но собственный ballon tooltip и всплывает (правда, не в трее). Мысль простая: тот же звук, к которому пользователь уже и так привык, тот же самый — стандартный.

А если тупо в HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\ найти путь к нужному wav-файлу и сыграть его через PlaySound?

Вот, например, товарищ советует:
http://www.codeproject.com/KB/audio-video/windowssoundevents.aspx
Re[6]: Как воспроизвести звук?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 13.07.11 20:09
Оценка: 10 (2)
Здравствуйте, LGB, Вы писали:

LGB>Здравствуйте, Carc, Вы писали:


C>>А "композитора" где взять!?!

C>>И потом, ну не городить же огород из-за такой мелочи? Делов-то "булькнуть" таким же "ушлепком" как и SystemNotification: ибо у меня именно схожий, но собственный ballon tooltip и всплывает (правда, не в трее). Мысль простая: тот же звук, к которому пользователь уже и так привык, тот же самый — стандартный.

LGB>А если тупо в HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\ найти путь к нужному wav-файлу и сыграть его через PlaySound?


LGB>Вот, например, товарищ советует:

LGB>http://www.codeproject.com/KB/audio-video/windowssoundevents.aspx

Всем спасибо за помощь!
Проблема решена.

BOOL SoundUtil::PlaySystemNotificationByFileName()
{
    const CString strSound=GetSystemNotificationFileName();
    if (strSound.IsEmpty())
        return FALSE;

    const DWORD dwFlags=SND_FILENAME;
    const BOOL b=PlaySound((LPCTSTR)strSound,NULL,dwFlags);

    return b;    
}

BOOL SoundUtil::PlaySystemNotificationByAlias()
{
    const DWORD dwFlags=SND_ALIAS;
    const BOOL b=PlaySound(TEXT("SystemNotification"),NULL,dwFlags);
    return b;
}

CString SoundUtil::GetSystemNotificationFileName()
{
    HKEY hkey=NULL;
    const CString strKEY=TEXT("AppEvents\\Schemes\\Apps\\.Default\\SystemNotification\\.Current");
    if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_CURRENT_USER,strKEY,0,KEY_QUERY_VALUE,&hkey))
        return TEXT("");

    CString strRet;
    DWORD dwSize=MAX_PATH*5;
    DWORD dwType=REG_SZ;
    const LONG lRet=RegQueryValueEx(hkey
        ,TEXT("")
        ,NULL
        ,&dwType
        ,(LPBYTE)(LPTSTR)strRet.GetBufferSetLength(dwSize+1)
        ,&dwSize
        );

    strRet.ReleaseBuffer();

    RegCloseKey(hkey);
    if (ERROR_SUCCESS != lRet)
        return TEXT("");

    strRet=ExpandPath(strRet);
    return strRet;    
}

CString SoundUtil::ExpandPath(const CString &strPath)
{
    const int nFind1=strPath.Find(TEXT("%"),0);
    if (nFind1 < 0)
        return strPath;

    const int nFind2=strPath.Find(TEXT("%"),nFind1+1);
    if (nFind2 < 0)
        return strPath;

    const int nLen=nFind2 - nFind1-1;
    const CString strName=strPath.Mid(nFind1+1,nLen);

    CString strVal;
    GetEnvironmentVariable(strName,strVal.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
    strVal.ReleaseBuffer();

    if (strVal.IsEmpty())
        return strPath;

    const int nLen2=nFind2 - nFind1 +1;
    const CString strRepl=strPath.Mid(nFind1,nLen2);

    CString strRet(strPath);
    strRet.Replace(strRepl,strVal);

    strRet=ExpandPath(strRet);

    return strRet;
}
Aml Pages Home
Re[7]: Как воспроизвести звук?
От: LGB Канада  
Дата: 13.07.11 21:02
Оценка: 8 (2)
Здравствуйте, Carc, Вы писали:

C>Всем спасибо за помощь!

C>Проблема решена.

C>
C>CString SoundUtil::ExpandPath(const CString &strPath)
C>{
C>    ...
C>}
C>


А вместо всего этого кода ExpandEnvironmentStrings не подойдет? Там не надо проценты вырезать, а потом заменять подстроку в исходной строке. Все должно поэкспандиться за нас
Re[8]: Как воспроизвести звук?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 13.07.11 21:12
Оценка:
Здравствуйте, LGB, Вы писали:

LGB>Здравствуйте, Carc, Вы писали:


C>>Всем спасибо за помощь!

C>>Проблема решена.

C>>
C>>CString SoundUtil::ExpandPath(const CString &strPath)
C>>{
C>>    ...
C>>}
C>>


LGB>А вместо всего этого кода ExpandEnvironmentStrings не подойдет? Там не надо проценты вырезать, а потом заменять подстроку в исходной строке. Все должно поэкспандиться за нас

Да, пожалуй Вы правы! Чего-то я "перевелосипедил" в пылу написания тестов.
Конечно нужно юзать ExpandEnvironmentStrings!
Aml Pages Home
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.