Summary: | Сигнал динамика системного блока | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Сережин Дмитрий <sdvinfo> |
Component: | Оборудование ; Драйвера | Assignee: | Vitaly Lipatov <lav> |
Status: | CLOSED FIXED | QA Contact: | |
Severity: | minor | ||
Priority: | P5 | CC: | amorozov, baraka, kondratyuk, lav, saa |
Version: | 1.0.9 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | Linux | ||
URL: | http://msdn.microsoft.com/en-us/library/ms645505.aspx | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | 610 | ||
Bug Blocks: | 384, 1217 | ||
Attachments: |
Тестовая программа с MessageBeep теперь воспроизводит звук через спикер
Тестовая программа Тестовая программа для Linux, воспроизводящая звук через спикер |
Description
Сережин Дмитрий
2008-01-24 11:10:44 MSK
Вроде простая отдельная задача. Скажите, а какие планы по этой задаче? (In reply to comment #2) > Скажите, а какие планы по этой задаче? > В течение месяца ошибка будет рассмотрена и, по возможности, исправлена. Есть сложности с тем, что вывод звука это по сути привилегированная операция, и так просто сделать это не получится. * Консольная функция Beep просто выводит \a в stdout * MessageBeep, если звук не выключен системным параметром SPI_GETBEEP, вызывает USER_Driver->pBeep() - причём не передавая параметр высоты звука. Эта Beep реализована в keyboard.c как XBell(thread_display(), 0); Таким образом всё сводится к тому, какие средства в X Window мы имеем для воспроизведения системного звука. Потому что иначе придётся делать через etersafe (потому как он имеет достаточные привилегии для работы с PC Speaker), а это не будет работать для терминальных серверов. Существуют ли какие-нибудь изменения планов по данной задаче? Предлагаю исследовать, какие возможности нам даёт Иксовый XBell (man XBell), работает ли это вообще. И хорошо бы вообще багу воспроизвести, потому что всё же реализовано уже. Вторым этапом надо добавить возможность указание высоты и длительности звука. Для этого X11DRV_Beep и прочие должны принимать все необходимые параметры. Created attachment 458 [details]
Тестовая программа с MessageBeep теперь воспроизводит звук через спикер
Будет в сборке 1.0.9-alt6 Вчера (04.08.2008) загрузил и поставил сборку 1.0.9 на Ubuntu 7.10. Создал ситуацию вывода системного сообщения от Access (Office XP). Сигнала системного динамика не было. На загрузке была выложена еще пока версия не alt6, или я просто не смог что-то правильно настроить? to amorozov@: приложи пожалуйста сюда тестовую программу в исходнике и в виде EXE-файла. Created attachment 640 [details]
Тестовая программа
Скачал. Запустил файл exe из под Wine. Тишина. А если перед запуском сделать xset b? Сделал. Звук включен. Результат: fixme:msnet:MSNET32_57 (0x0000 0x000a (nil) 0x0000 0x33f7f6): stub fixme:msnet:MSNET32_57 (0x0000 0x000a 0x33f794 0xfc940000 0x33f7f6): stub err:service:RPC_Init RpcServerListen failed with error 1714 err:wineboot:start_services_process Unexpected termination of services.exe - exit code 1714 Кстати, не подумал сразу на всякий пожарный уточнить. У меня версия SQL. На случай если вдруг тут могут быть какие-то различия ... Это пишется в консоли при запуске, а сигнала системного динамика по прежнему нету? Имеется в виду, что "xset b" в консоли выполнил. Затем с консоли запустил экзешник тестовой программы. Результат, отображенный в консоли был следующим: fixme:msnet:MSNET32_57 (0x0000 0x000a (nil) 0x0000 0x33f7f6): stub fixme:msnet:MSNET32_57 (0x0000 0x000a 0x33f794 0xfc940000 0x33f7f6): stub err:service:RPC_Init RpcServerListen failed with error 1714 err:wineboot:start_services_process Unexpected termination of services.exe - exit code 1714 Created attachment 644 [details]
Тестовая программа для Linux, воспроизводящая звук через спикер
А эта программа какой-нибудь звук издаёт?
Как выяснилось последняя тестовая программа тоже не издавала никакого звука. По той простой причине, что в блоке напрочь отсутствовал системный динамик. Динамик поставил. Звук появился. На виндовой тестовой программе появился тоже. При системных сообщениях от Access звука нет. Установлена версия 1.0.9. А какая версия Access? Office 2000 Вот такой макрос работает в Excel 2000 в 1.0.9: Public Declare Function MessageBeep Lib "user32" _ (ByVal wType As Long) As Long Sub Макрос1() MessageBeep (&HFFFFFFFF) End Sub В Access проверить пока не получилось, так как при открытии или создании базы выдаётся сообщение об ошибке при установлении связи с сервером OLE или элементом управления ActiveX. Попробовал воспроизвести проблему с другой версией Access. В бутылке mso2003 Access не запускается: [wine@cellar OFFICE11]$ ww MSACCESS.EXE err:service:RPC_Init RpcServerListen failed with error 1714 err:wineboot:start_services_process Unexpected termination of services.exe - exit code 1714 В бутылке mso97 Access тоже не запускается. Выдаёт ошибку, что нет файла system.mdw. http://bugs.etersoft.ru/show_bug.cgi?id=1133 При запуске Access XP (бутылка mibofficexp) появляется сообщение об ошибке. При нажатии на OK оно появляется снова и до самого Access добраться не даёт. После исправления Антоном установки OfficeXP (#610) можно попробовать продолжить работу над багой. Добавил в Access к команде Msgbox предварительно Beep. Сигнал идет. 2 Илья MessageBeep работает, но вывод сообщений посредством метода docmd.MsgBox не сопровождается сигналом динамика системного блока. Ну если он хоть как-то может издаваться - этого лично мне уже достаточно. Спасибо. Предлагаю издавать звуковой сигнал через MessageBeep (n) при наличии в uType MB_ICONEXCLAMATION MB_ICONSTOP MB_ICONERROR MB_ICONHAND Остаются ещё эти, на которые не реагируем: MB_ICONINFORMATION MB_ICONASTERISK MB_ICONQUESTION MB_ICONWARNING Сделал коммит, будет в 1.0.10 commit a8b85b47012bbbd3a7c651b4a0d8c7b451a08efe Author: Vitaly Lipatov <lav@etersoft.ru> Date: Thu Dec 4 21:10:42 2008 +0300 USER32: call MessageBeep according to MessageBox style +++ b/dlls/user32/msgbox.c @@ -531,6 +532,11 @@ INT WINAPI MessageBoxIndirectW( LPMSGBOXPARAMSW msgbox ) EnumThreadWindows(GetCurrentThreadId(), MSGBOX_EnumProc, (LPARAM)&threadWindows); } + beepStyle = msgbox->dwStyle & + (MB_ICONEXCLAMATION|MB_ICONSTOP|MB_ICONERROR|MB_ICONHAND); + if (beepStyle) + MessageBeep(beepStyle); + ret=DialogBoxIndirectParamW(msgbox->hInstance, tmplate, |