Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] @start MyLoader.exe + {PARAMETERS == %1 %*} как? (http://forum.oszone.net/showthread.php?t=138321)

semiono 21-04-2009 21:19 1100361

@start MyLoader.exe + {PARAMETERS == %1 %*} как?
 
Помогите!
Я написал обычный загрузчик для проги, смысл в том, что он делает кое какие
дополнительные действия и потом обычно запускает модуль:
Код:

ShellExecute("HprSnap6.exe", "", @ScriptDir)
Заморочка в том, что я люблю ещё батники привязывать к приложениею для поддержки консоли...
%SystemRoot%\system32\HprSnap.cmd:
Код:

@start C:\~\Apps\HprSnap\HprSnap6.exe "%1" %*
REM но вместо этого надо запускать лоадер
REM @start C:\~\Apps\HprSnap\HprSnap_Script_au3.exe "%1" %*

Но теперь с лоадером я теряю возможность запуска с параметрами:
# HprSnap C:\zzz.png

К сожалению такое не работает :)
ShellExecute("HprSnap6.exe", "%1", @ScriptDir)

А что такое opt_flag < Run ( "filename" [, "workingdir" [, show_flag[, opt_flag ]]] ) ?
Я не очень понимаю где и для чего юзать Run либо ShellExecute... Очень похожие две функции.

Какое решение может быть есть?
Я ещё объясню если не очень понятно...

SyDr 21-04-2009 22:35 1100428

ShellExecute позволяет открывать различные файлы. Также, как вы действуете с ними обычно: открыть, изменить, печать, открыть свойства.
Run позволяет запускать исполняемые файлы.

А здесь надо просто с параметрами командной строки работать.
Переменная $CmdLine[0] содержит число параметров в командной строке.
$CmdLine[1] - первый параметр.
$CmdLine[n] - n-ый параметр.
$CmdLineRaw - содержит всю строку параметров.

ShellExecute("HprSnap6.exe", $CmdLineRaw, @ScriptDir)
Запустит HprSnap6.exe с параметрами, которые были переданы скрипту при запуске.

Creat0R 21-04-2009 23:08 1100457

Цитата:

теряю возможность запуска с параметрами
См. в справке, там есть примеры по работе с параметрами переданными в скрипт с внешних приложении.

semiono 21-04-2009 23:26 1100470

Сам скрипт выполнит приложение с ошибкой. Надо компилить, так как скрипт сам есть параметр :)
Это у меня похожие ошибки были с командами *.msi когда я не врубался, что это лишь правая часть для msiexec.exe
Спасиб! Кажись работает!

semiono 21-04-2009 23:57 1100499

Почему-то
Код:

ShellExecute("HprSnap6.exe", $CmdLineRaw, @ScriptDir)
из батника всегда запускается с параметрами, следовательно пустой параметр всегда вызывает глюк.

батник:
@start C:\~\Apps\HprSnap\script.exe "%1" %*

хотя сам скрипт.EXE напрямую кликом запускает прогу "тихо" и с параметрами тоже запускает корректно.

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

Creat0R 22-04-2009 01:47 1100568

semiono, Возможно параметры нужно в кавычки заключать? Хотя проблема для меня звучит смутно.

semiono 22-04-2009 03:52 1100598

Какой-то нонсенс! Когда на вход попадает file.png то скрипт это корректно передаёт через маску "%1"
Но когда на входе пусто, то скрипт эту же маску считает за файл и пытается загрузить %1 как будто это картинка!
Правда я одно не понимаю это происходит на входе скрипта или на входе HprSnap6.exe приложения которое скрипт
запускает с передачей параметров. Хотя не легче если б знал.

amel27 22-04-2009 07:19 1100628

Цитата:

Цитата Creat0R
Хотя проблема для меня звучит смутно »

угу, без конкретных примеров кода, воспроизводящих результат, это гадание на кофейной гуще

SyDr 22-04-2009 08:27 1100661

Я тоже не экстрасенс. Может быть вы просто не проверяете в скрипте, есть параметры или их нет?

semiono 22-04-2009 17:21 1101145

Да не проверяю, потому что не умею. Для меня это именно трудная задача...
Логически мыслить могу, но надо ещё и опыт в скрипте иметь.
Параллельно на ассемблере пытался тоже это разрешить :)
И надо сказать не трудней чем на автоите. Но косяков тоже понаделал...

Всё верно, самое главное проверить, есть ли на входе параметры или нет и соответственно этому
запускать программу, либо с переданными в неё параметрами либо наголо как есть!
Я извиняюсь, но я много итак написал чтоб объяснить, скрипт не могу, так как я сам это спрашиваю.
:)

Если честно, то я не очень понял как это использовать
$CmdLine[1] - первый параметр.
$CmdLine[n] - n-ый параметр.

Потому как кроме $CmdLineRaw и $CmdLine[0] в ShellExecute("HprSnap6.exe", $CmdLineRaw, @ScriptDir) ничего не впихнуть. Через & чтоли? Но их связки тоже либо мне не понятно либо смысл какой!
$CmdLine[0] & $CmdLine[1] & $CmdLine[2] когда в документации чё-то сказанно типа 0 - это сам файл чтоль...
Вообщем я это не осилил.

Sylver Dragon, подскажи как проверять?

semiono 22-04-2009 18:26 1101203

А можно узнать API используемые в автоит?
На msdn из функций директорий всего две - GetCurrentDirectory, SetCurrentDirectory.
А как тогда получается @ScriptDir ? Что за WinAPI это?

SyDr 22-04-2009 18:58 1101219

$CmdLine[0] - число параметров!
Пример:
С:\Test.exe /param1 -param2 /para3 .4 "param 5"
$CmdLine[0] = 5
$CmdLine[1] = /param1
$CmdLine[2] = -param2
$CmdLine[3] = /para3
$CmdLine[4] = .4
$CmdLine[5] = param 5
$CmdLineRaw = /param1 -param2 /para3 .4 "param 5"

@ScriptDir? Небось просто получает путь к файлу скрипта, а потом обрезает его.

semiono 22-04-2009 19:49 1101272

блин, я даже сейчас призадумался!
$CmdLine[0] - число параметров!
$CmdLine[0] = 5 как пять, когда это ноль! и тока дошло, этож индекс а не значение, вот я туплю! :)

теперя я понимаю что меня тоже не понимают :)

Sylver Dragon, а ты про проверку что-то говорил?
А можно чекнуть, когда параметров в команд строке нету, чтобы $CmdLineRaw убрать на тот случай?
If $CmdLineRaw = 0 then ...
ShellExecute(...."")
чтоли так? А хотя это идея, уже сам понял...

proxy 22-04-2009 20:12 1101296

Код:

If $CmdLine[0] > 0 Then
    ...
EndIf


semiono 22-04-2009 20:21 1101307

proxy, превед :)


Время: 10:47.

Время: 10:47.
© OSzone.net 2001-