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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] $CmdLine[0,1,2,3], $CmdLineRaw... как этим пользоваться. (http://forum.oszone.net/showthread.php?t=183449)

semiono 20-08-2010 17:19 1478119

$CmdLine[0,1,2,3], $CmdLineRaw... как этим пользоваться.
 
Не понимаю как написать скрипт. Лучше я свой батник покажу, что мне надо зделать в autoit3 варианте.

..\system32\Cubase.cmd:
Код:

@if "%1"=="r" regedit.exe & goto sh
@if "%1"=="t" taskmgr.exe & goto sh
@if "%1"=="s" shutdown -r -f -t 00 & goto sh
@if "%1"=="x" shutdown -s -f -t 00 & goto sh
@if "%1"=="p" VSTPluginsPath.exe & goto sh
@start "" "C:\I\Apps\Cubase\Cubase.exe" %*
:sh

If $cmdline[0] = r Then... так что ли? Впринципе до меня только одно дошло, то что *.* это $CmdLineRaw.

Наверное после каждого Then будет свой ShellExecute... громозко как-то получится?
Вообщем, подскажите, пожалуйста?

---
Вот попытался набросок зделать, глючит немнжко :)
Код:

If $CmdLine[0]="r" Then
        ShellExecute("regedit.exe")
ElseIf $CmdLine[1]="t" Then
        ShellExecute("taskmgr.exe")
Else
        ShellExecute(@ProgramFilesDir & "\Cubase\Cubase.exe", $CmdLineRaw)
EndIf

вариант два, ещё хуже стало ))) :(
Код:

#Include <Array.au3>

If $CmdLine[0]="r" Then
        ShellExecute("regedit.exe")
ElseIf $CmdLine[1]="t" Then
        ShellExecute("taskmgr.exe")
ElseIf $CmdLineRaw Then
        ShellExecute(@ProgramFilesDir & "\Cubase\Cubase.exe", $CmdLineRaw)
Else
        ShellExecute(@ProgramFilesDir & "\Cubase\Cubase.exe")
EndIf


amel27 20-08-2010 17:59 1478136

Код:

Select
        Case $CmdLine[0]=1 And $CmdLine[1]="r"
                Run("regedit.exe", @WindowsDir)
        Case $CmdLine[0]=1 And $CmdLine[1]="t"
                Run("taskmgr.exe", @SystemDir)
        Case $CmdLine[0]=1 And $CmdLine[1]="s"
                Run("shutdown -r -f -t 0", @SystemDir)
        Case $CmdLine[0]=1 And $CmdLine[1]="x"
                Run("shutdown -s -f -t 0", @SystemDir)
        Case $CmdLine[0]=1 And $CmdLine[1]="p"
                Run("VSTPluginsPath.exe")
        Case Else
                Run("C:\I\Apps\Cubase\Cubase.exe "& $CmdLineRaw)
EndSelect


Creat0R 20-08-2010 18:20 1478148

Или так:

Код:

If $CmdLine[0] = 0 Then Exit

Switch $CmdLine[1]
    Case "r"
        Run("regedit.exe", @WindowsDir)
    Case "t"
        Run("taskmgr.exe", @SystemDir)
    Case "s"
        Run("shutdown -r -f -t 0", @SystemDir)
    Case "x"
        Run("shutdown -s -f -t 0", @SystemDir)
    Case "p"
        Run("VSTPluginsPath.exe")
    Case Else
        Run("C:\I\Apps\Cubase\Cubase.exe "& $CmdLineRaw)
EndSwitch


madmasles 20-08-2010 18:21 1478149

semiono,
$CmdLine[0] возвращает количество параметров. Честно говоря, я сам с ними долго разбирался. Попробуйте создать 2 скрипта. 1-ый:
Код:

#include <Constants.au3>

$mod = Run(@AutoItExe & ' /AutoIt3ExecuteScript Test.au3 Первый_параметр Второй_параметр Третий_параметр', @ScriptDir, @SW_HIDE, $STDOUT_CHILD)
$sLog = ''
While 1
    $sLog &= StdoutRead($mod)
    If @error Then ExitLoop
    Sleep(2)
WEnd
MsgBox(0, '', $sLog)

2-ой (назовите его Test.au3 и положите в ту же папку, где лежит 1-ый):
Код:

If Not $CmdLine[0] Then
    ConsoleWrite('Нет параметров' & @LF)
    Exit
EndIf
For $i = 1 To $CmdLine[0]
    ConsoleWrite($CmdLine[$i] & @LF)
    Sleep(100)
Next
ConsoleWrite(@LF & 'Все!' & @LF)

Теперь запускайте 1-ый скрипт и меняйте параметры. Я сам с этим игрался, чтобы разобраться. Кстати, если скомпилировать первый скрипт, то он будет запускать второй и на компьютере с неустановленным AutoIt`oм. :)

PS
Кажется, Yashied приводил примерно такой пример на autoit-script.ru, лень искать.

semiono 20-08-2010 18:25 1478151

Очень изящные красивые примеры! Их хоть прямо в справку записывай, отлично!
amel27, Creat0R, madmasles, благодарю!

Creat0R 20-08-2010 18:26 1478152

Ещё по теме: _CmdLineSetEvent - Обработчик командной строки

semiono 20-08-2010 23:32 1478357

Всётаки эта тема безконечная. :)
Запускаю консольное приложение, ISCC.exe - кампилятор Inno Setup.
Задача просто передать ему управление.
Вот батник который работает:
\system32\ISCC.cmd
Код:

@"C:\I\Apps\Innosup\ISCC.exe" %*

Я уже все варианты перебрал наугад, в лучшм случае выдаёт справку, но на вход комманды не хочет воспринимать.
Код:

#Include <Constants.au3>

Run(@ProgramFilesDir & "\Innosup\ISCC.exe ", $CmdLineRaw, ".", $STDERR_CHILD & $STDIN_CHILD  & $STDOUT_CHILD)

Кампилю как "Create CUI instead of GUI.EXE", хотя может быть не надо? :)

Смысл флагов $STDIN_CHILD не очень понятен, но где-то что-то я улавливаю приблизительно. ))

amel27 21-08-2010 07:24 1478453

Цитата:

Цитата semiono
уже все варианты перебрал наугад »

право, быстрей в справку глянуть:
Код:

Run(@ProgramFilesDir &"\Innosup\ISCC.exe "& $CmdLineRaw, @ScriptDir, @SW_HIDE, $STDERR_CHILD + $STDIN_CHILD + $STDOUT_CHILD)

semiono 21-08-2010 17:30 1478711

А вот так правильно?
Код:

$pid = Run(@ProgramFilesDir & "\Innosup\ISCC.exe " & $CmdLineRaw, @WorkingDir, @SW_ENABLE, $STDIO_INHERIT_PARENT)
StdioClose($pid)

У меня не до конца прокрутка в консоли срабатывет, будто бы подвисает на одну строку.
Но работа ISCC.exe кампилятора выполняется.

semiono 21-08-2010 18:16 1478738

Понял проблему!! Надо было RunWait() теперь не подвисает! Анологично батнику чётко работает.
Но что лучше $STDIO_INHERIT_PARENT или 0x1 + 0x2 ?? И надо ли закрывать процесс StdioClose($pid) ?

amel27 22-08-2010 09:09 1479080

semiono, в RunWait нет таких флагов, и по понятной причине - скрипт останавливается до тех пор, пока не завершит работу запущенный процесс


Время: 08:13.

Время: 08:13.
© OSzone.net 2001-