Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как это делает WinAmp [D7, WinXP]


***(H@kker)*** ©   (2006-05-15 21:06:00) 

Доброго времени суток!
Есть задача: есть файл, расширение которого зарегестировано в реестре, т.е. при двойном нажатии на этот файл запускается моя прога. Так вот, как мне определить имя этого самого файла?
Подобное можно наблюдать, когда кликаеш на мр3-файл - запускается WinAmp и проигрывает именно этот файл.
Пожалуйста помогите!


Джо   (2006-05-17 01:30:00) [1]

> [6] ychenick ©   (17.05.06 00:59)

Для того, чтобы не было подобных извращений, коммандная строка (%1) в реестре прописывается, заключенной в кавычки.


ychenick   (2006-05-17 00:59:00) [2]

Да, но если путь к файлу будет: C:\Моя Любимая папка\File.mp3, то работать не будет =( , т.к. paramstr(1) будет равен только C:\Моя, а paramstr(2)=Любимая, ...

Используем более универсальную ф-цию:

if (ParamCount > 0) then
begin
 FileName:=ParamStr(1);
 for i:=2 to ParamCount do
 begin
  FileName:= FileName +' '+ParamStr(i);
 end;


ParamCount-стандартная ф-ция. Результат в FileName, причем в сокращенном виде, типа C:\Моя Лю~\Fi~.mp3, но это большой роли не должно играть.Для ОС эти пути эквиваленты. А если хош превести к нормальному виду:


Function LongFileName(ShortName: String): String;
Var
 SR: TSearchRec;

Begin
 Result := '';
 If (pos ('\\', ShortName) + pos ('*', ShortName) +
     pos ('?', ShortName) <> 0) Or Not FileExists(ShortName) Then
 Begin
 Result :=ShortName;
   { ignore NetBIOS name, joker chars and invalid file names }
   Exit;
 End;
   Result := '';
 While FindFirst(ShortName, faAnyFile, SR) = 0 Do
 Begin
   { next part as prefix }
   Result := '\' + SR.Name + Result;
   SysUtils.FindClose(SR);  { the SysUtils, not the WinProcs procedure! }
   { directory up (cut before '\') }
   ShortName := ExtractFileDir (ShortName);
   If length (ShortName) <= 2 Then
   Begin
     Break;  { ShortName contains drive letter followed by ':' }
   End;
 End;
 Result := ExtractFileDrive (ShortName) + Result;
end;


Удачи!


***(H@kker)***   (2006-05-15 21:26:00) [3]

Все работает!
Огромное спасибо!!!


antonn   (2006-05-15 21:23:00) [4]

или нет, лучше так:
caption:=paramstr(1); //вставь код и запусти свою программу через клик по файлу с зарегестрированным расширением.


antonn   (2006-05-15 21:21:00) [5]

ладно, попробуем по другому...
имя_файла_которым_"запустили"_программу:=paramstr(1)


***(H@kker)***   (2006-05-15 21:18:00) [6]

файл:=paramstr(1)
___________________
Какому именно файлу присвоить данное значение?
Файл Один.


antonn   (2006-05-15 21:11:00) [7]

файл:=paramstr(1)
ЗЫ программа запускается в этом случае с параметром, в котором файл (или несколько)


Наверх

Титульная страница Поиск, карта сайта Написать письмо