Библиотека Disphelper и работа с WMPlayer.OCX
|
|
WQ | Дата: Пятница, 18.07.2014, 13:02 | Сообщение # 1 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| Пытаюсь воспроизвести mp3 c помошью объекта WMPlayer. Объект создается, файл подгружается, устанавливаю громкость.
Но запуск проигрывания происходит с сообщение об ошибке. В этой строке можно писать все, что угодно, проигрывание начинается в любом случае. Задача - убрать сообщение с ошибкой. Я не слишком разбираюсь в свойствах и методах, но в disphelper работа с ними реализована как-то совсем непонятно...
Код #Define UNICODE #Include Once "disphelper/disphelper.bi" DISPATCH_OBJ(WMP) dhInitialize(TRUE) dhToggleExceptions(TRUE)
dhCreateObject("WMPlayer.OCX", NULL, @WMP) dhPutValue(WMP, ".Url = %s", "C:\1.mp3") dhPutValue(WMP, ".Settings.Volume = %d", 50)
dhPutValue(WMP, ".controls = %s", "Play") 'строка с ошибкой
Sleep
|
|
| |
haav | Дата: Пятница, 18.07.2014, 15:49 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| Цитата Я не слишком разбираюсь в свойствах и методах, но в disphelper работа с ними реализована как-то совсем непонятно...
Согласен, да и документации кот наплакал. Я как то пытался работать с архивами с помощью этой либы, но так и забросил.
С этим кодом, я так понимаю надо вызвать сначала интерфейс IDispatch. Это у меня вроде получилось, не знаю правда правильно или нет А вот дальше через него вроде как нужно вызывать методы, но вот это как раз у меня не вышло. В общем вот я помутил, но результат тоже нулевой:
Код ##Define UNICODE #Include Once "disphelper/disphelper.bi" Dim As Integer iRet Dim As IDispatch Ptr Controls Dim As WString*30 methods = "play" DISPATCH_OBJ(WMP) dhInitialize(TRUE) dhToggleExceptions(TRUE)
dhCreateObject("WMPlayer.OCX", NULL, @WMP)
dhPutValue(WMP, ".Url = %T", "1.mp3") dhPutValue(WMP, ".Settings.Volume = %d", 50) dhGetValue("%o",@Controls,WMP,".controls")
? controls ' интерфейс получен
dhGetValue("%d", @iRet, controls, "isAvailable(%T)", @methods)
? iRet ' здесь вроде как должен быть адрес, но iRet = 0 'dhCallMethod(Controls,"play()") 'dhPutValue(WMP, ".Controls = %s", ".play") 'строка с ошибкой
Sleep
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
WQ | Дата: Вторник, 22.07.2014, 19:34 | Сообщение # 3 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| Цитата haav ( ) В общем вот я помутил, но результат тоже нулевой: Спасибо за пример. Вообще, у меня задача состоит в получении продолжительности музыки/видео. WMPlayer.OCX подходит, но работать с ним, видимо, нормально не получится. Есть MediaInfo.bi, но примера к ней нет
|
|
| |
haav | Дата: Вторник, 22.07.2014, 20:31 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| А чем window9 не устраивает? Там есть воспроизведение музыки и видео. А продолжительность нетрудно высчитать (простейшее математическое действие).
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
WQ | Дата: Вторник, 22.07.2014, 21:51 | Сообщение # 5 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| Цитата haav ( ) А чем window9 не устраивает? Там есть воспроизведение музыки и видео. А продолжительность нетрудно высчитать (простейшее математическое действие). Дело в том, что WMPlayer и без кодеков много чего проигрывает. Функции из window9 хороши, но требуют установленных кодеков. А на счет продолжительности, я так понимаю, речь о проигрывании файла определенное время и двух замерах MovieGetCurrentPosition()?
|
|
| |
haav | Дата: Среда, 23.07.2014, 05:27 | Сообщение # 6 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| Делишь то, что возвращает GetEndPosMovie на 10.000.000 (10 миллионов), получаешь продолжительность медиафайла в секундах.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
WQ | Дата: Среда, 23.07.2014, 12:09 | Сообщение # 7 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| Цитата haav ( ) Делишь то, что возвращает GetEndPosMovie на 10.000.000 (10 миллионов), получаешь продолжительность медиафайла в секундах. Спасибо. Но нужно это отразить в справке.
|
|
| |
|