Параметры функции ShellExecute()
ShellExecute(hInstance,"open","C:/Windows/system32/java.exe -jar Java2Demo.jar", NULL, NULL, SW_SHOWNORMAL);
Причем функция запускает приложение без доп параметров
(ShellExecute(hInstance,"open","C:/Windows/system32/java.exe", NULL, NULL, SW_SHOWNORMAL);),
а как заставить выполнять с параметрами?:confused:
ShellExecute(hInstance,"open","C:/Windows/system32/java.exe",
"-jar Java2Demo.jar", NULL, SW_SHOWNORMAL);
THX!
А за что отвечает 5-й параметр (указатель NULL перед SW_...)????
Не - пятый параметр определяет рабочую директорию приложения, если NULL то используется текущая директория того процесса, который запускает.
А как показано - это какраз SW_..., шестой
А как показано - это какраз SW_..., шестой[/quote]
точно: обсчитался:)
А как показано - это какраз SW_..., шестой[/quote]
согласен. за предыдущее сообщение прошу прощение: обсчитался:)
Rar.exe a -m5 -df ProjectMain.exe.rar ProjectMain.exe
то, shellexecute будет выглядить так
ShellExecute(Self.Handle,nil,'RAR.exe', 'a -m5 -df ProjectMain.exe.rar ProjectMain.exe', nil, SW_HIDE);
:)
Точно так же вызвать копилятор и предать ему файл параметром.
Главное чтоб компиялтор умел в с консоли компилировать (ну это большинство умеют) и знать его опции. )
ты лучше скажи, на чём программа написана, с попощью какого пакета ты собираешься компилировать?
у меня есть компилятор bcc32.exe и есть скажем файл 1.cpp который нада откомпилировать...
так вот что надо написать-то?..
Как напрямую не знаю, а вот используя cmd.exe
можно так (Delphi):
var
Comm: string;
begin
Comm := 'cmd /<c или k> "' + <адрес ярлыка> + ''';
WinExec(PChar(Comm), <1 или 0>);
end;
"c" в том случае, если нада закрыть консоль по завершении запуска, "k", если консоль надо оставить. Естественно, если параметр uCmdShow установить в 0, то "с" или "k" не имеет никакого значения. Все это не оказывает влияния на запуск ярлыка (мы запускаем cmd.exe, а он уже запускает ярлык).
Адрес ярлыка надо обрамить "" (на тот случай, если в нем есть пробелы). Исчо проводник не показывает расширения у ярлыков, однако оно у них есть и его надо дописать в конце - ".lnk"
Использовать "cmd" не совсем корректно, тк он может так не называться вовсе. Корректно - использовать значение переменной среды comspec, в качестве адреса командного интерпритатора. Правда, WinExec, почемуто, строку типа "%comspec%" не проглатывает((, хотя из батника нормально работает.
Исчо интересные наблюдения: я сегодня впервый раз узнал, что PChar(Str) и @Str - не всегда одно и тоже =)
Статическая инф. типа ShellExecute(handle,'open',info/1.htm',nil,nil,SW_SHOW);- проходит.
Но вот такое выражение даёт ошибку:
ShellExecute(handle,'open',qst_data.info,nil,nil,SW_SHOW);
(qst_data.info='info/1.htm' - строка)
[Error] Unit2.pas(179): Incompatible types: 'String' and 'PAnsiChar'
[Fatal Error] Project1.dpr(6): Could not compile used unit 'Unit2.pas'
Вопрос: как этого избежать?
Заранее спасибо!
По теме: Конечно, XP - уходящий поезд. Но по своим служебным обязанностям пришлось под XP программу на дельфи писать. Долго-долго я я боролся с ошибкой стадии исполнения 216. Потом в голову как молния ударила - никаких nil -ов, а всё указать явно. Не по умолчанию. Ошибка ИСЧЕЗЛА. Турбо дельфи 2006 Free / XP SP3 лицензия + обновления.