Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.047 c
15-1174848004
_Knight_
2007-03-25 22:40
2007.04.22
Почему-то не могу ничего запостить&amp;#133 пароль не принимается.


3-1170237223
mak-shatura
2007-01-31 12:53
2007.04.22
индексы в mdb


2-1175283096
dzhagr
2007-03-30 23:31
2007.04.22
Проблема с доступом к базе данных


15-1175247187
Vlad Oshin
2007-03-30 13:33
2007.04.22
HTML. Размер шрифта в таблице. Как задать сразу для всей таблицы?


2-1175605485
FIL-23
2007-04-03 17:04
2007.04.22
Как в вордоский документ вставить код программы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский