|
Вопрос # 2 507/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
У меня такой вопрос: написал аудио плеер , но открывать файлы как полагаеться он не умеет, разрешение "mp3" зарегестрировал на свой плеер в реестре, выделяю 10 файлов mp3 в проводнике Windows, по нажатию Enter добавляется только один фаил , как добавить все выделенные файлы в плэйлист, ParamCount почему-то не чево не даёт . . .
Если кто сталкивалься, подскажите как реализовать?
 |
Вопрос задал: 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
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|