Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Запуск файла из делфи

Автор: $ad!st 10.05.2005 17:31

мне надо чтоб моя прога в определённое время запускала файл с локального диска, подкажите как это сделать....
я пытаюсь юзать апи функцию ShellExecut

ShellExecute(HANDLE, 0, '"C:\Program Files\Winamp\winamp.exe"',
'"D:\Music\KoЯn\Untouchables\korn-thoughless.mp3"',nil,0);

но мне нужна возможность выбора открываемого файла
ShellExecute(HANDLE, 0, '"C:\Program Files\Winamp\winamp.exe"',
OpenDialog1.FileName,nil,0);

а FileName недопустимо в данном случае.....

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

Автор: volvo 10.05.2005 18:31

ShellExecute или WinExec ...
http://forum.pascal.net.ru/index.php?showtopic=4414&view=findpost&p=37611

Автор: $ad!st 10.05.2005 18:47

мне нужна возможность выбора открываемого файла с помощью OpenDialog

Автор: volvo 10.05.2005 19:10

Цитата($ad!st @ 10.05.05 13:31)
а FileName недопустимо в данном случае.....


Цитата($ad!st @ 10.05.05 14:47)
мне нужна возможность выбора открываемого файла с помощью OpenDialog

Не пора ли выбрать что-то одно... Эти 2 условия друг другу просто противоречат...

Почему недопустимо использование FileName? Это же просто строка, что ее нельзя передать в ShellExecute?

Автор: $ad!st 10.05.2005 19:31

Цитата
Почему недопустимо использование FileName? Это же просто строка, что ее нельзя передать в ShellExecute?

нельзя, вот что оно мне пишет:

[Error] runner.pas(49): Incompatible types: 'String' and 'PChar'

такаяже фигня с WinExec.....

Автор: volvo 10.05.2005 19:51

Ну, так переведи String в PChar:
Pchar(s) ... и передавай в процедуру

Автор: $ad!st 10.05.2005 20:13

УРААААААА!!!!!!!работает, только не так как надо...но всёравно спасибо

Автор: kominet 12.03.2007 19:43

Запарился уже с этим ShellExecute... в общем проблемма в следущем... на форме есть кнопа которая отвечает за открытие документа в ворде(путь до документа в переменной) есть ещё опенДиалог который никакого отношения к этой всей фигне отношения не имеет НО ShellExecute начинает возвращать значение 2(что меньше 32 и говорит об ошибке если я правильно понимаю) как только я хотябы раз воспользуюс опен диалогом... а до этого всё ОК... Гуру подскажите в чём могут быть грабли?
вот кусок проги:


procedure TADDKandidateForm.SB2Click(Sender: TObject);
begin
if OD.Execute then
begin
FilePath:=OD.FileName;
FileName:=ExtractFileName(FilePath);
FilePathEdit.Text:=FileName;
end;
end;

procedure TADDKandidateForm.OpenButtonClick(Sender: TObject);
var h:HWND;
begin
ShellExecute(h,PChar('open'),PChar(ResumeImage),nil,PChar('ResumeFolder\'),SW_ShowNormal);
end;


переменная ResumeImage:string; если что...

Автор: volvo 12.03.2007 20:42

Цитата
в чём могут быть грабли?
Скорее всего - в том, что пользование OpenDialog-ом изменяет текущую папку, и все относительные пути, естественно, оказываются неправильными, что подтверждает и Code = 2 (ERROR_FILE_NOT_FOUND) ...

Как вариант - используй пятым параметром ShellExecute не относительный, а абсолютный путь (ExtractFileDir(ParamStr(0)) вернет тебе папку, в которой находится EXE-файл твоего приложения, от него и надо перейти в папку \ResumeFolder)

Автор: kominet 12.03.2007 23:59

volvo
Сенькью вери матч... как раз в этом прикол и был... просто добавил

SetCurrentDir(ExtractFileDir(Application.ExeName));

перед вызовом ShellExecute