Помощь - Поиск - Пользователи - Календарь
Полная версия: Запуск файла из делфи
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
$ad!st
мне надо чтоб моя прога в определённое время запускала файл с локального диска, подкажите как это сделать....
я пытаюсь юзать апи функцию 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
ShellExecute или WinExec ...
http://forum.pascalnet.ru/index.php?showt...indpost&p=37611
$ad!st
мне нужна возможность выбора открываемого файла с помощью OpenDialog
volvo
Цитата($ad!st @ 10.05.05 13:31)
а FileName недопустимо в данном случае.....


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

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

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

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

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

такаяже фигня с WinExec.....
volvo
Ну, так переведи String в PChar:
Pchar(s) ... и передавай в процедуру
$ad!st
УРААААААА!!!!!!!работает, только не так как надо...но всёравно спасибо
kominet
Запарился уже с этим 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
Цитата
в чём могут быть грабли?
Скорее всего - в том, что пользование OpenDialog-ом изменяет текущую папку, и все относительные пути, естественно, оказываются неправильными, что подтверждает и Code = 2 (ERROR_FILE_NOT_FOUND) ...

Как вариант - используй пятым параметром ShellExecute не относительный, а абсолютный путь (ExtractFileDir(ParamStr(0)) вернет тебе папку, в которой находится EXE-файл твоего приложения, от него и надо перейти в папку \ResumeFolder)
kominet
volvo
Сенькью вери матч... как раз в этом прикол и был... просто добавил
SetCurrentDir(ExtractFileDir(Application.ExeName));

перед вызовом ShellExecute
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.