Такой вопросец...
Как средствами Delphi 7 организовать запуск bat-файла (да и вообще любого внешнего файла? Чт оза функция управляет этиим? И нужно ли чего подключать, в Uses
(есть только имя файла с путем к нему, какие еще параметры нужны?)
Когда пишу ShellExecuteEx - мне не выдает параметров, как будто такой функции нет..
Может я опять чего не увидел в хелпе? :p2:
Легче всего использовать WinExec. При обращении к WinExec необходимо задать полный путь к программе или имя EXE файла, расположенного в пути поиска, а также способ отображения программы (константы SW_HIDE, SW_SHOW,
SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE? SW_SHOWNA, SW_SHOWNORMAL).
Если вызов функции произошел успешно, то WinExec вернет дескриптор новой
программы (который не может быть меньше 32, т.е. если WinExec возвращает число меньше 32, то вызов привел к ошибке...
Еще один простой вызов это - ShellExecute. Этот вызов во многом напоминает WinExec, однако он поддерживает обработку типов файлов, зарегистрированных в Windows. Например, если вы с помощью ShellExecute вы попробуете запустить файл с расширением .BMP, то буде запущена программа Paint или любая другая, которая использует для просмотра графических файлов. В качестве аргументов ShellExecute принимает дескриптор окна (если есть необходимость в сообщениях об ошибках), строку, такую как open (открыть), print (напечатать) и explore (исследовать), можно в качестве этой строки передать NULL, тогда файл указанный вами будет открыт (open). Так же ShellExecute необходимо сообщить имя файла и любые параметры командной строки (чаще всего NULL), и оставшиеся два аргумента это текущий каталог и константа функции ShowWindow (как и в WinExec).
Значение, которое возвращает ShellExecute такое же, как и у WinExec. Функцию ShellExecute можно использовать, например, для открытия корневого каталога диска С:
volvo
Благодарю, сейчас попробуем.
Добавлено (26.10.04 11:31):
Cygno , а не пробовал сразу объявлять не string, a PAnsiChar?
По-моему этот тип - массив [0..255] символов... хотя точно не уверен.
Пробовал.
Но мне надо выполнить конкатенацию - собрать две части пути, и компилятор ругается, когда я пробую выполнить выражение
Cygno
Попробуй так:
procedure TfrmPPG.btnRunClick(Sender: TObject);
var
iDelim: integer;
sProjSettFile: string
ss: PAnsiChar;
begin
iDelim := Pos(' ',frmPPG.lstProjects.Items.Strings[frmPPG.lstProjects.ItemIndex]);
sProjSettFile := Copy(frmPPG.lstProjects.Items.Strings[frmPPG.lstProjects.ItemIndex],1,iDelim-1) + '_settings.bat';
ss := PAnsiChar('D:\delphi\' + sProjSettFile);
WinExec(ss,SW_SHOW);
end;
Спасибо, volvo !
Сработало.
Только вот почему, когда я пишу функцию в окне кода, например
PAnsiChar( - ставлю открывающую скобку, а мне ничего не выдается, типа списка параметров?
Не для всех функций что ли так сделано?
Ага, я опоздал, volvo уже и текст привёл...
Кстати, спасибо за рассказ о ShellExecute, я тоже не знал. А откуда была эта информация?
В продолжение...
При выполнение команды
WinExec(ss,SW_SHOW);
Очередная проблема с этими запусками.......
Есть папка на серваке - \\servername\folder\
В этой папке лежит мое приложение (exe-шник), два файла, типа конфигурационных к нему
и батник, который в результате работы должен быть запущен.
Все пути к файлам, которые читает прога - относительные
то есть без указания полного пути..
Конфиг-файлы, прога видит нормально.
Пример из кода:
Cygno
Ну если у тебя:
WinExec('cmd.exe \\servername\folder\' + 'batfile.bat',SW_SHOW);
Гм... если путь относительный, то почему бы не приписать к нему и абсолютные координаты, взятые из командной строки вызова самой твоей проги?
По крайней мере на TP это выглядело бы примерно так:
Dir:DirStr;
Name:NameStr;
Ext:extstr;
s:PathStr;
begin
s:=ParamStr(0);
FSplit(s,Dir,Name,Ext); Dir - имя нужной директории
assign(f,Dir+'batfile.bat');
Cygno
Есть еще один момент - у тебя случайно в пути к файлу нет кириллицы? По-моему, из-за этого ты тоже можешь получить:
Кириллицы точно нет.
Cygno
А ведь Atos прав - лучше всего запускать батник из той же директории, где находится exe - файл. Что-то типа этого:
WinExec(ExtractFilePath(Application.ExeName) + 'batfile.bat',SW_SHOW);
Ну что ж господа - свершилось чудо!
Cygno
Только вот почему, когда я пишу функцию в окне кода, например
PAnsiChar( - ставлю открывающую скобку, а мне ничего не выдается, типа списка параметров?
это ведь не функция, это тип...
а выражение type(var) - не что иное как явное преобразование типов (в С оно, кстати, записывается наоборот - (type)var )
Я думал, что это функция, отвечающая за преобразование типов.
Если я пишу, например: StrToFloat(, ставлю скобку, то открывается подсказка, какой тип параметра нужен.
Amoxicillin Dosage For Domestic House Cat
5mg Cialis From India
Why not settling on games that is fun and at the same time your earning. Well it'll make suspense because the game is well but dude just try it and it gave me hope while pandemic is real rn. https://newswebblog.com/heres-a-simple-guide-to-start-your-online-casino-journey/