Открыть файл из Delphi

  • Автор темы DenProx
  • Дата начала
D

DenProx

#1
Длброго времени суток. У меня такой вопрос: есть программка которая позваляет запускать программы, например открывается видео. Вопрос в том, возможно ли открыть файл с параметрами, типа - Открыть с помощью?

Пример реализации: нужно запустить два видео файла с разными плеерами.
 

vital

Больной Компом Детектед
29.01.2006
2 432
34
#2
Нихрена не понял.

Добавлено: а, короче
uses
shellapi;
======
ShellExecute(0, 'open', 'путькекзе', 'параметры', nil, SW_SHOWNORMAL);
Пс.
или меняйте занятие, или учитесь задавать вопросы..
 
D

DenProx

#3
Да, извините, действительно сейчас прочитал, сам не понял что)))) утомленность сказывается....

думаю на примере будет понятней:
вот два способа которыми я пытаюсь открыть файл:
1.
Код:
procedure TfmOpen.btnOpenClick(Sender: TObject);
var
str: string;
i: integer;
begin
str:=FileListBox.FileName;
ShellExecute(0,'open',PChar(str),'','',SW_SHOW);
fmProgress.ShowModal;
Close;
end;
этот просто открывате файл, программой которая стоит по умолчанию в Винде. Например открываем видео файл, он открывается Media Player Classic.

2.
Код:
procedure TfmOpen.Button1Click(Sender: TObject);
{$define WIDE} // если Unicode
var
cmdLine, fName: {$ifdef WIDE}WideString{$else}string{$endif};
si: TStartupInfo;
pi: TProcessInformation;
begin
cmdLine := '"C:\Program Files\Light Alloy\LA.exe" /Play ';
fName  := '"'+ FileListBox.FileName +'"';
// WinExec(PChar(cmdLine + fName), SW_SHOW); // только для string

FillChar(si, SizeOf(si), #0);
with si do begin
cb := SizeOf(si);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := SW_SHOW;
end;

if {$ifdef WIDE}CreateProcessW{$else}CreateProcessA{$endif}(
nil,					// lpApplicationName,
{$ifdef WIDE}pWideChar{$else}pChar{$endif}(cmdLine + fName), // lpCommandLine,
nil,					// lpProcessAttributes,
nil,					// lpThreadAttributes,
True,				  // bInheritHandles,
0,					 // dwCreationFlags
nil,					// lpEnvironment,
nil,					// lpCurrentDirectory,
si,					 // lpStartupInfo,
pi) then begin					// lpProcessInformation
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
end;
end;
этот способ открывает с помощью нужной программы, которую укажем... но он не может открыть файл по ярлыку....

вот вопрос, в том как сделать открытие файла на подобии второго способа, но чтобы он ярлык тоже мог открывать...

на данный момент, если открыть ярлык, от тогоже видео, то программа в итоге пытается открыть ярлык, как отдельный файл, естественно выходит ошибка...

вот, как то так...
 

vital

Больной Компом Детектед
29.01.2006
2 432
34
#4
ну так вы посмотрите свой первый вариант. ВЫ там передаете не то и не так. В моем посте я же написал вам..
 
D

DenProx

#5
почему не так... почти ни какой разници по моему...
 
D

DenProx

#7
ну вот ваш:

ShellExecute(0, 'open', 'путькекзе', 'параметры', nil, SW_SHOWNORMAL);

вот мой:

ShellExecute(0,'open',PChar(str),'','',SW_SHOW);


у меня PChar(str) - это путь к *.ехе, параметры пустые, nil - отсутствует и SW_SHOWNORMAL от SW_SHOW не многим отличается, что в общем то на результат хоть как не влияет...

где здесь указывать, с каким приложением нужно открыть?
 

vital

Больной Компом Детектед
29.01.2006
2 432
34
#8
ShellExecute(0, 'open', 'путь_к_программе_которой_открывать_файл', 'файл_который_этой_программой_надо_открыть', nil, SW_SHOWNORMAL);
Так понятнее?
 
D

DenProx

#9
Понятнее, но всеравно не работает...

вот что я пишу:
Код:
ShellExecute(0,'open','C:\Program Files\Light Alloy\LA.exe',PChar(str),nil,SW_SHOWNORMAL);
открывается LA, но файл найти не может. Попробывал проверить путь "str", вывел в сообщение, путь нормальный, полный...

что можете посоветовать?
 
D

DenProx

#11
да помогло, но... теперь ошибка такая же как и при использовании CreateProcess (мой второй пример), а именно, LA ярлык открывает как отдельный файл...
 

vital

Больной Компом Детектед
29.01.2006
2 432
34
#12
if fileext(str)='lnk' then
begin
ShellExecute(0,'open','ВАШ_ЯРЛЫК','','',SW_SHOW);
end
else
было выше
 

vital

Больной Компом Детектед
29.01.2006
2 432
34
#14
Ну а самостоятельно посмотреть функцию никак? Очевидно же, что она делает!
ExtractFileExt() там.
 
D

DenProx

#15
как же я могу знать... если я только учусь...?

темболее, мы вернулись к тому, что было у меня в первом прмере...


ShellExecute(0,'open','ВАШ_ЯРЛЫК','','',SW_SHOW);

открывает, но со стандартным плеером... как у меня и работало, до того как я создал эту тему...
 
E

EdgarWine

#16
Хм... Поясните что ваша программа конкретно должна делать? Мне вот почему-то показалось что вы хотите чтоб файлы (например avi) открывались вашей программой по умолчанию...
Тогда при запуске нужно открывать файл имя которого в ParamStr(1)...
 
D

DenProx

#17
Вопрос уже решен, т.е. не освсем, но смысл в том что, так как мне нужно нельзя сделать на сегодняшни день....
 
D

DenProx

#18
ни чего и не нужно говорить, просто ярлык из подмоей прораммы нужно открыть не простой, а измененный программой UltraMon...