Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 507

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
У меня такой вопрос: написал аудио плеер , но открывать файлы как полагаеться он не умеет, разрешение "mp3" зарегестрировал на свой плеер в реестре, выделяю 10 файлов mp3 в проводнике Windows, по нажатию Enter добавляется только один фаил , как добавить все выделенные файлы в плэйлист, ParamCount почему-то не чево не даёт . . .
Если кто сталкивалься, подскажите как реализовать?

DimonZ Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: DimonZ (статус: Посетитель)
Вопрос отправлен: 11 марта 2009, 22:05
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, DimonZ!
Я уже когда то писал решение подобной проблемы. На самом деле Windows запускает на каждый файл по копии Вашего приложения. А они уже и должны разобраться. Работает это обычно так. Приложение, запустившись, проверят, не запущена ли уже его копия. (можно искать по FindWindow окно приложения, а сам код вписать в файле проекта до создания формы - в таком случае мы не будем находить самого себя). Если копии нет, то приложение считает себя "главным" и запускает выбранный файл на воспроизведение. Если нет - то используя сообщение WM_COPYDATA, посылает окну "главного приложения" имя файла и закрывается.
"Главное приложение" получив подобное сообщение с именем файла уже решает как и куда его добавить. Почему только WM_COPYDATA? потому что это единственно сообщение, которое позволяет передавать указатель между процессами. В противном случае можно передать только 2 по 4 байта (можно конечно использовать общую память, сокеты...)
Посмотреть пример использования этого события можно к примеру здесь http://www.delphisources.ru/pages/faq/base/wm_cd_link.html
А теперь ближе к реальному коду
Почитать по диагонали http://forum.ixbt.com/topic.cgi?id=26:2870
поизучать http://www.delphisources.ru/pages/faq/base/send_cmd_s_to_f.html

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 12 марта 2009, 01:31

Ответ #2. Отвечает эксперт: Виталий

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

Я задавал уже много вопросов по данной теме и нашёл ответ.
Правильно говорилось, что нужно сделать запуск только 1 копии приложения. Если при открытии файла приложение уже запущено, то ищем окно главного и отправляем ему сообщение WM_COPYDATA с именем файла.

Так как сообщения приходят довольно быстро, то время между получением имён файлов обычно 10-150 мс.
Я делал так : файлы не сразу добавлялись в плейлист, а во временный список. При получении сообщения смотрел сколько времени прошло с предыдущего сообщения и если оно больше нужного значения, то добавлял в временный список команду очистки плейлиста.

Далее на форме есть таймер, который, если послееднее сообщение было давно, просматривает временный список, сортирует его, если есть команда очистить, то очищает, и добавляет файлы в финальный плейлист.

Фуууу.... Примерно так.

Ответ отправил: Виталий (статус: 2-ой класс)
Время отправки: 13 марта 2009, 12:15


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:39
Выполнено за 0.02 сек.