![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как это делает 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)
ЗЫ программа запускается в этом случае с параметром, в котором файл (или несколько)