Форум: "Media";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизКак во время запуска плеера воспроизвести более одного файла? Найти похожие ветки
← →
alex_bog © (2006-08-04 19:49) [0]Пишу собственный медиаплеер на Delphi, за основу взял библиотеки BASS, но не в этом суть. Проблема заключается вот в чем: любой уважающий себя плеер умеет открывать за раз более одного файла (то есть, если в проводнике выбрать несколько медиафайлов и перетащить их на иконку плеера, то он их воспроизведет). В реальности же (то есть, у меня, в Delphi) через параметры коммандной строки (ParamStr(1)) отлавливается только тот файл, на котором был совершен щелчок (при переносе или вызове контекстного меню, не важно), а остальные файлы идут лесом... Но плееры как-то ведь узнают об остальных файлах. Вопрос - КАК ОНИ ЭТО ДЕЛАЮТ, и КАК ЭТО СДЕЛАТЬ НА DELPHI?
← →
Rial © (2006-08-05 04:12) [1]Передаваться всегда будет один файл.
Когда обведешь несколько, проводник запустит для каждого файла копию
программы с один параметром.
Нужно проверять при запуске, если ли уже запущенный плеер, и, если есть,
передавать ему имя файла из командной строки.
← →
alex_bog © (2006-08-05 10:38) [2]Нифига. Запускается только ОДНА копия и ей на вход передается файл, на котором был совершен щелчок. Так что не все так просто.
← →
antonn © (2006-08-05 11:58) [3]paramstr(>1)+paramcount() ?
← →
alex_bog © (2006-08-05 14:57) [4]
> paramstr(>1)+paramcount() ?
Ладно, был не прав. В случае перетаскивания файлов на иконку плеера пути к медиафайлам на действительно передаются в ParamStr(i), а ParamCount - их количество.
Значит, сформулируем вопрос по-другому: если я выделю несколько mp3-файлов и выберу пункт меню "Открыть с помощью" -> "AlexSoftMP.exe", то тут уже точно через параметры отлавливается только ОДИН файл. Что делать с остальными?
← →
XProger © (2006-08-05 19:09) [5]Насколько я помню длина строки параметров не должна превышать 255 символов (т.е. файлов не много выйдет). Могу ошибаться, поправьте если что не так.
← →
Rial © (2006-08-05 21:02) [6]
> alex_bog © (05.08.06 14:57) [4]
> Значит, сформулируем вопрос по-другому: если я выделю несколько
> mp3-файлов и выберу пункт меню "Открыть с помощью" -> "AlexSoftMP.
> exe", то тут уже точно через параметры отлавливается только
> ОДИН файл. Что делать с остальными?
>
Я именно на этот вопрос и ответил.
Const
MainCaption = "MyProg";
TmpCaption = "TmpProg";
OnCreate:
Caption:=TmpCaption;
If (FindWindow("TForm1",MainCaption) <>0)then begin
//Посылаем имя файла открытому приложению.
Exit;
end;
Caption:=MainCaption;
> XProger © (05.08.06 19:09) [5]
>
> Насколько я помню длина строки параметров не должна превышать
> 255 символов (т.е. файлов не много выйдет). Могу ошибаться,
> поправьте если что не так.
То было в DOS. А в делфи можно хоть фильм HEX - кодом через
командную строку передавать. ))
← →
alex_bog © (2006-08-06 12:06) [7]
> Я именно на этот вопрос и ответил.
>
> Const
> MainCaption = "MyProg";
> TmpCaption = "TmpProg";
>
> OnCreate:
>
> Caption:=TmpCaption;
> If (FindWindow("TForm1",MainCaption) <>0)then begin
> //Посылаем имя файла открытому приложению.
> Exit;
> end;
> Caption:=MainCaption;
По твоему, безо всяких ухищрений у меня должно запуститься n копий плеера (по количеству файлов), а плеер запускается ОДИН!
← →
alex_bog © (2006-08-06 12:07) [8]Кстати, если расширение файла не "mp3" (или там "wma"), то копий запускается действительно n штук... Возможно, дело в DDE?
← →
Rial © (2006-08-06 17:56) [9]
> alex_bog © (06.08.06 12:07) [8]
Поясни, пожауйста, чей плеер, каким образом ты регистрируешь расширения,
как именно открываешь файлы,
а также каким образом обрабатываешь их в программе.
Потому как пока получается путаница.
← →
alex_bog © (2006-08-06 18:40) [10]
> чей плеер
:) Мой плеер (см. первый пост).
> каким образом ты регистрируешь расширения
Никак. Не регистрирую вообще. Расширения стандартные - mp3/2/1, ogg, wma и wav. По-умолчанию они зарегистрированы на WinAMP.
З.Ы. Если нужно предварительно зарегистрировать, то напиши, что конкретно нужно сделать.
> как именно открываешь файлы
Выделяю группу файлов, затем даю комманду "Открыть с помощью" -> "Выбрать программу..." - "AlexSoftMP.exe", после чего открывается плеер. ОДНА КОПИЯ ПЛЕЕРА, наличие запущенных копий я не проверяю!
> каким образом обрабатываешь их в программе
Пока только проверяю параметры коммандной строки. Так вот, ParamCount ВСЕГДА равен 1, а ParamStr(1) - путь последнего выделенного файла (на котором был совершен щелчок).
← →
alex_bog © (2006-08-09 20:52) [11]Rial, куда пропал?
← →
Rial © (2006-08-09 22:01) [12]По поводу регистрации расширений :
Unit Registration;
Interface
{
Регистариция приложение с указанием имени исполняемого файла,
именен папки приложение, расширением, названием программы, командой открытия (напр. "%1")
Обратите внимание, что команду открытия необходимо брать в двойные кавычки!
}
//Регистрация расширения
procedure CreateFileReg(Const IconFileName, Name, Ext, FileLabel, OpenCommand : String; Const IconNumber : Integer; Const NoOpen : Boolean);
//Регистрация приложения
procedure CreateSoftReg(Const ExeName, SoftName : String);
//Удаление регистрации расширения
procedure DeleteFileReg(Const Name, Ext : String);
//Удаление регистрации расширения
procedure DeleteSoftReg(Const SoftName : String);
//Получение установочной директории
function GetInstallPath(Const SoftName : String) : String;
Implementation
Uses SysUtils, Windows, Registry;
Const SoftPath="\Software\";
InstallStr="InstallPath";
function GetInstallPath(Const SoftName : String) : String;
Var Reg : TRegistry;
begin
GetInstallPath:=GetCurrentDir;
Try
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Try
If (Reg.OpenKey(SoftPath + SoftName, False))then begin
GetInstallPath:=Reg.ReadString(InstallStr);
Reg.CloseKey;
end;
Finally
Reg.Free;
end;
Except
end;
end;
procedure CreateSoftReg(Const ExeName, SoftName : String);
Var Reg : TRegistry;
begin
Try
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Try
Reg.CreateKey(SoftPath + SoftName);
If Reg.OpenKey(SoftPath + SoftName, False) then begin
Reg.WriteString(InstallStr, ExtractFileDir(ExeName));
Reg.CloseKey;
end;
Finally
Reg.Free;
end;
Except
end;
end;
procedure CreateFileReg(Const IconFileName, Name, Ext, FileLabel, OpenCommand : String; Const IconNumber : Integer; Const NoOpen : Boolean);
Var Reg : TRegistry;
procedure Step(Const Path, Name, Value : String);
begin
If (Reg.OpenKey(Path, True))then begin
Reg.WriteString(Name, Value);
Reg.CloseKey;
end;
end;
begin
Try
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_CLASSES_ROOT;
Try
Step("\" + Ext, "", Name);
Step(Name, "", FileLabel);
If (NoOpen)then
Step("\" + Name, "NoOpen", "");
Step("\" + Name + "\DefaultIcon", "", IconFileName + "," + IntToStr(IconNumber));
If (OpenCommand <> "")then
Step("\" + Name + "\Shell\Open\Command", "", """ + IconFileName + "" " + OpenCommand);
Finally
Reg.Free;
end;
Except
end;
end;
procedure DeleteFileReg(Const Name, Ext : String);
Var Reg : TRegistry;
begin
Reg:=TRegistry.Create;
Reg.Rootkey:=HKEY_CLASSES_ROOT;
Try
Reg.DeleteKey("\" + Ext);
Reg.DeleteKey(Name);
Finally
Reg.Free;
end;
end;
procedure DeleteSoftReg(Const SoftName : String);
Var Reg : TRegistry;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Try
Reg.DeleteKey(SoftPath + SoftName);
Finally
Reg.Free;
end;
end;
end.
Сначала ригистрируй приложение, потом - его расширение.
← →
Rial © (2006-08-09 22:09) [13]После этого твои файлы будут открываться автоматически
с помощью указаннго приложения.
Если обвести группы файлов и нажать для всех "Enter", то
откроется столько копий программы, сколько файлов было выделено.
И каждой из копий первым параметром командной строки будет
передано имя "ее" файла.
То есть при запуске очередной копии ты должен предусмотреть,
открыто ли уже единожды твое приожение, или нет.
Это ты можешь сделать, разобравшись с обменом данными между приожениями.
Действительно, одна копия откроется, есль нажать "открыть с помошью",
но дело только в том, что остальные файлы проводник просто не знает
пока, как и открыть.
Другой вопрос, что сторонние приложения открываются единожды, так как
они при запуске передают полученное имя фала активной копии и
терминируются.
← →
alex_bog © (2006-08-11 13:32) [14]Действительно, так и есть. Сейчас зарегистрировал расширения (пока вручную) и сразу открываться начало n копий плеера, так что спасибо за помощь!
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.045 c