Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
VIsuaL_DG
0 / 0 / 0
Регистрация: 01.01.2013
Сообщений: 26
1

Определить статус воспроизведения файла

05.07.2014, 16:19. Просмотров 1865. Ответов 34
Метки нет (Все метки)

Здравствйуте!

Опишу ситуацию:

У меня есть программа в которой для воспроизведения аудио я использую библиотеки winmm.dll:

Visual Basic
1
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
а для воспроизведения собственно аудиофайла команду:
Visual Basic
1
Call mciExecute("play 1.mp3")
Вопрос:

Как по нажатии на Command1 узнать играет ли 1.mp3 или уже воспроизведение завершено?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2014, 16:19
Ответы с готовыми решениями:

Сделать зацикливание воспроизведения звукового файла
Здравствуйте! Работаю в Visual Basic 6. Работая со звуком столкнулся с...

Как определить статус службы?
Добрый день всем. Подскажите пожалуйста, как определить статус службы? Знаю,...

Скорость воспроизведения музыки
Подскажите пожалуйста !!! Как воспроизводить музыку с помощью элемента...

Контрол для воспроизведения видео
Люди дайте кто-нибудь контрол для воспроизведения видео plz...

Закрыть wmplayer после воспроизведения
Добрый день! Помогите разобраться Фрагмент кода: sPaths...

34
The trick
Модератор
7386 / 2651 / 759
Регистрация: 22.02.2013
Сообщений: 3,828
Записей в блоге: 76
08.07.2014, 11:07 21
При вызове A-версий функций происходит следующий список действий
  1. Строка конвертируется в ANSI посредством __vbaStrToAnsi
  2. ANSI cтрока передается в функцию
  3. Внутри строка конвертируется в UNICODE через RtlMultiBiteToUnicodeN
  4. Вызывается mciSendStringW
  5. После выполнения строка конвертируется в ANSI посредством RtlUnicodeToMultiByteN
  6. Строка конвертируется в UNICODE посредством __vbaStrToUnicode
При вызове W-версии функции:
  1. Вызывается mciSendStringW
2
VIsuaL_DG
0 / 0 / 0
Регистрация: 01.01.2013
Сообщений: 26
09.07.2014, 15:19  [ТС] 22
Всем огромнейшее спасибо за помощь!
Особенно Pro_grammer
0
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
13.07.2014, 21:49 23
Цитата Сообщение от Антихакер32 Посмотреть сообщение
Я бы вообще не заморачивался тоже..
вызвал бы с помощью Shell плейер который по умолчанию в системе для MP3
и мониторил бы в таймере его движения
Специально для любителей таймеров:

Цитата Сообщение от Russinovich M., Solomon D., Ionescu A
However, the registry can be read at other times as well, such as in response to a modification of a registry value or key. Although the registry provides asynchronous callbacks that are the preferred way to receive change notifications, some applications constantly monitor their configuration set¬tings in the registry through polling and automatically take updated settings into account. In general, however, on an idle system there should be no registry activity and such applications violate best practices. {Process Monitor, from Sysinternals, is a great tool for tracking down such activity and the application or applications at fault.)
Тоже самое касается не только реестра.

Pro_grammer, имхо. Total Commander у тебя уже давно устарел.
Новая версия нормально обрабатывает и отображает символы юникода внутри RAR-контейнера.

Да и вообще, рекомендую почитать какое множество исправлений в 8.50. Поиск отдельным потоком.
На правах рекламы

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Может потому и нет у меня твоих проблем с кодировками и несовместимостью? Рекомендую.
Какой-то вредный совет.
У меня, кстати, тоже в музыкальной коллекции немалое кол-во файлов с юникодными именами.
0
Pro_grammer
Модератор
6159 / 2240 / 442
Регистрация: 24.04.2011
Сообщений: 3,965
Записей в блоге: 10
13.07.2014, 22:58 24
Цитата Сообщение от Dragokas Посмотреть сообщение
У меня, кстати, тоже в музыкальной коллекции немалое кол-во файлов с юникодными именами.
А какой в этом смысл? Лично я кроме как на кириллице и латинице ни чего читать больше не умею. И если мне в автоматическом режиме всё это перекодировали из юникода в ASCII то я только этому рад. ИХМО это фича, а не баг! Или кого то радуют китайские или там арабские каракули в названиях?
1
The trick
Модератор
7386 / 2651 / 759
Регистрация: 22.02.2013
Сообщений: 3,828
Записей в блоге: 76
13.07.2014, 23:14 25
Цитата Сообщение от Pro_grammer Посмотреть сообщение
А какой в этом смысл?
Смысл есть, есть много других символов помимо кириллицы и латиницы. Файловые операции на понимают мультибайтовую кодировку насколько мне известно (лень проверять), а это значит невозможность открыть файлы. Зря наверное Microsoft сделала поддержку юникода в Windows?
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Лично я кроме как на кириллице и латинице ни чего читать больше не умею.
А как же другие? И это не имеет отношения к файловым операциям. В ANSI можно и китайскими иероглифами писать без проблем с помощью мультибайтовых символов (аналог суррогатных пар в юникоде), но при работе с файлами используется заданный LCID (в основном это текущая локаль, но можно изменить) и все символы кодируются в нее с помощью аналога WideCharToMultibyte.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
ИХМО это фича, а не баг!
Это не фича и не баг, это побочное действие ANSI. Запусти файл в той локали в которой у тебя символы в имени файла - все разархивируется с нормальными именем. Но если в имени присутствуют символы из разных кодовых страниц, то уже работа будет невозможной, только в юникоде.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Или кого то радуют китайские или там арабские каракули в названиях?
Арабов и китайцев.
0
Dragokas
13.07.2014, 23:41
  #26

Не по теме:

Pro_grammer, ну дык. В каком виде мне скинули, в таком и пылиться на винте.
Ну а вообще, у меня есть один сборник и чисто на арабском.

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

0
Pro_grammer
Модератор
6159 / 2240 / 442
Регистрация: 24.04.2011
Сообщений: 3,965
Записей в блоге: 10
14.07.2014, 06:53 27
The trick, Dragokas, вы мне так объясняете, будто я только вчера узнал, что такое юникод и для чего он нужен
А я всего лишь всем говорю, что мне без надобности везде втыкать юникодные API только для того, что кто то за меня решил, что это правильно. Если я пишу что то и знаю, где и для чего это будет использовано, то правильно так, как я решил, и точка! И не надо рассказывать, какой это стандарт программисту на VB6, если "Стандартные контролы, стандартные файловые функции и еще по мелочи, да, не работают" с юникодом.
Любой инструмент надо применять при необходимости, а не на авось, что вдруг понадобится, и поверьте, если мне будет необходима поддержка юникода в моей программе, то я её реализую.
0
The trick
Модератор
7386 / 2651 / 759
Регистрация: 22.02.2013
Сообщений: 3,828
Записей в блоге: 76
14.07.2014, 11:11 28
Цитата Сообщение от Pro_grammer Посмотреть сообщение
А я всего лишь всем говорю, что мне без надобности везде втыкать юникодные API только для того, что кто то за меня решил, что это правильно.
Да, это действительно правильно, иначе может быть трабла со считыванием файлов, как в примере который я показал выше.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
И не надо рассказывать, какой это стандарт программисту на VB6, если "Стандартные контролы, стандартные файловые функции и еще по мелочи, да, не работают" с юникодом.
Ну тык ты и нестандартно получаешь длину трека - через API. При чем тут работа с контролами? Почему бы не пользоваться преимуществом юникода чтобы это всегда работало везде, а специально делать так чтобы намеренно исключать эту возможность и включать возможные баги в программу? И ты так и не ответил:
Цитата Сообщение от The trick Посмотреть сообщение
В чем вообще проблема вместо Call func (String), написать Call func (StrPtr(String))? Или это считается граблями?
.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Любой инструмент надо применять при необходимости, а не на авось, что вдруг понадобится, и поверьте, если мне будет необходима поддержка юникода в моей программе, то я её реализую.
Никто не спорит, просто не нужно так категорично писать, на правильные поправки:
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Вот мне раеально ваши с Хакером заморочки по поводу юникода по барабану!
И уж тем более там, где это работает без всяких W
Я привел пример где это не работает, а Total Commander - это отговорка, я уже написал почему.
0
Dragokas
14.07.2014, 21:09
  #29

Не по теме:

Цитата Сообщение от Pro_grammer Посмотреть сообщение
The trick, Dragokas, вы мне так объясняете, будто я только вчера узнал, что такое юникод и для чего он нужен
Ну, со стороны оно именно так и выглядит.

Я только ответил на твой вопрос, приведя реальный пример.

0
Антихакер32
14.07.2014, 22:25
  #30

Не по теме:

Меня тоже, все эти юникоды напрягают :)
Ansi = 256 символов
Unicode = 65536 символов

0
The trick
Модератор
7386 / 2651 / 759
Регистрация: 22.02.2013
Сообщений: 3,828
Записей в блоге: 76
14.07.2014, 22:54 31
Цитата Сообщение от Антихакер32 Посмотреть сообщение
Ansi = 256 символов
Unicode = 65536 символов
Что за ересь? Читай, читай.
0
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
14.07.2014, 23:12 32
Пусть сначала это освоит: http://ru.wikipedia.org/wiki/UTF-8
2
Антихакер32
14.07.2014, 23:25
  #33

Не по теме:

Ну понятно, один UTF-8 = от одного и более байт :)
тоесть до этого я был уверен что для юникода требуется 2 байта,
а юникоды еще и разные бывают %-)

0
The trick
Модератор
7386 / 2651 / 759
Регистрация: 22.02.2013
Сообщений: 3,828
Записей в блоге: 76
14.07.2014, 23:57 34
Цитата Сообщение от Антихакер32 Посмотреть сообщение
Ну понятно, UTF-8 = от одного до 6 байт
Цитата Сообщение от Антихакер32 Посмотреть сообщение
Unicode = 65536 символов
Не видишь противоречие? По ссылке которую я дал есть такая строчка
Хотя формы записи UTF-8 и UTF-32 позволяют кодировать до 231 (2 147 483 648) кодовых позиций, было принято решение использовать лишь 1 112 064 для совместимости с UTF-16. Впрочем, даже и этого на текущий момент более чем достаточно — в версии 6.0 используется чуть менее 110 000 кодовых позиций (109 242 графических и 273 прочих символов).
Цитата Сообщение от Антихакер32 Посмотреть сообщение
тоесть до этого я был уверен что для юникода требуется 2 байта, просто юникоды еще и разные бывают
Ты ссылки читал вообще?
Поскольку в UTF-16 можно отобразить только 220+216−2048 (1 112 064) символов, то это число и было выбрано в качестве окончательной величины кодового пространства Юникода (диапазон кодов: 0x000000-0x10FFFF)
UTF-8 - это уже способ кодирования юникода. А как ты там будешь его хранить не важно, можно и UTF-16 или UTF-32 и даже просто байтовый массив хранить. В Windows, в частности в W-функциях используется UTF-16.
Тоже самое и с ANSI, не думай что 1 байт = 1 символ. Есть многобайтовые кодировки, там один символ может кодироваться несколькими байтами. В Windows обычно используют DBSC кодировку от 1 до 2-х байт на символ, в VB6 используется именно эта. Это позволяет стандартными контролами отображать китайские, арабские иероглифы. Как выдернуть функцию локализации приложения в отдельную функцию из имеющегося проекта
И вообще вот хорошая статья по этому поводу.
1
Антихакер32
Заблокирован
15.07.2014, 09:45 35
Да, статья интересная, мне особенно понравилось это:
Пожалуйста, не пишите ни одной строки кода, пока вы не закончите читать эту статью.
и это
вы не намного лучше, чем доктор, который не верит в микробов
мой словарный запас обогатился

Добавлено через 39 минут
Ну идея статьи вобщем-то понятна,
коротко я бы обозначил так, существуют кодовые страницы
в которых может по разному отображаться набор символов старше 128 байта
в частности для UTF-8, первый байт побитово 0, 10, 110, 1110, 11110, 111110, 111111
где 0 означает конец признака продолжения байта, всё, пойду дальше кодить
0
15.07.2014, 09:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2014, 09:45

Статус служб в Windows
Как получить статус (запущена/остановлена) определенной службы в Windows ?

Прогрессбар в статус баре (как в IE)
сабж

Как узнать статус принтера?
Пожалуйста, помогите, кто может...! Имеется документ, который надо напечатать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru