![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Unconnected |
![]()
Сообщение
#1
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Привет всем.
Весь день бьюсь с WinExec. Допустим, код winexec('cmd /C ret.bat',SW_HIDE); батник открывает. А вот winexec(pchar('cmd /C '+path+'ret.bat'),SW_HIDE); нифига не открывает! Хотя, по логике вещей просто обязан. В path ТОЧНО лежит правильный путь. Может, с типами проблема, подскажите.. Да-да, я знаю, что WinExec устарел, и что можно обойтись без cmd /C вовсе. Мне нужно так. Добавлено через 4 мин. Чёрт возьми. Ужасно извиняюсь. Как обычно бывает, после создания темы на решение проблемы, над которой думал полдня, уходит минута. Для пути нужны были кавычки (что логично, в нём есть пробелы). winexec(pchar('cmd /C "'+path+'ret.bat"'),SW_HIDE); Можно удалить в принципе.. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
А ведь MSDN явно говорит:
Цитата WinExec Function Runs the specified application. Note This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function. Цитата Мне нужно так. Это ты потом Майкрософту будешь говорить, что тебе ТАК нужно, когда в 64-битной версии Windows у тебя твой код вылетит с ошибкой (ибо там нет этого камня - обратной совместимости с 16-битными ОС)? Или что? |
Unconnected |
![]()
Сообщение
#3
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Почему камня?) Вообще, надо наверное на ShellExecute переделать (так же можно?).. Мне просто надо как бы от имени cmd запустить.
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Почему камня? Потому что тянет назад и не дает двигаться вперед.Цитата надо наверное на ShellExecute переделать (так же можно?) "Можно и зайца научить курить" (С) "Служебный роман".В смысле, функция ShellExecute() может, конечно, запускать на выполнение какую-то программу, но предназначена она не для этого, а для того, чтобы для заданного типа файлов выполнить определенное действие. Вот если у тебя задача - открыть HTML-файл браузером по умолчанию, то это как раз задача, которая решается через ShellExecute, а не ползанием по реестру и вычислением, какой там браузер установлен дефолтным, а потом - запуском его с твоим файлом. А если тебе надо запустить батник - то твой случай описан прямо в справке по CreateProcess: Цитата lpApplicationName [in, optional] The name of the module to be executed. This module can be a Windows-based application. It can be some other type of module (for example, MS-DOS or OS/2) if the appropriate subsystem is available on the local computer. <...> To run a batch file, you must start the command interpreter; set lpApplicationName to cmd.exe and set lpCommandLine to the following arguments: /c plus the name of the batch file. (CreateProcess Function) |
Unconnected |
![]()
Сообщение
#5
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Ну, в ShellExecute тоже можно указывать нужные параметры. Я с ней и сделал, в CreateProcess миллион входных параметров, долго разбираться..
shellexecute(form1.handle,'open','cmd.exe',pchar('/C "'+path+'ret.bat"'),nil,SW_HIDE); -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 0:25 |