---Zak---
Скриптер
- Сообщения
- 455
- Репутация
- 120
Если очень и очень хотите что-нибудь такое придумать... Как бы поступил я... наверное
Создал некое подобие INI файла, но если необходимо делать различные действия (например: запустить команду в CMD; запустить hostname с параметром из переменной; отправить клавишу) да еще и с учетом, того, чтобы это все было последовательно.
Читал файл построчно и выполнял действия из структуры:
cmd=hostname
- просто запустить hostname через командную строку
hostname=
- запустить функцию (допустим GUIHostName), в которой имеется необходимый GUI. А после чего запустить саму команду
hostname=param1
- запустить функцию (допустим GUIHostName), в которой имеется необходимый GUI. А после чего запустить саму команду с параметром после "=", т.е. param1
inputbox=hostname
- запустить функцию InputBox, которая запросит дополнительный параметр. Но в итоге мы запускаем hostname через командную строку с доп.параметром указанный в InputBox
key={ENTER}
- запустить ControlSend и отправить {ENTER}
winwait=Блокнот
- Ждать окно с Title развным "Блокнот"
sleep=100
- вызвать Sleep с параметром 100
Суть заключается в следующем: первый параметр (до "=") передает что делать, а второй параметр передает уже сам параметр или что-либо.
Сама программа:
Пример файла "filecmd.ini"
Пример реализации Вашего "filecmd.ini" (Внимание !!! Я не понесу какую-либо ответственность в виду последующей неисправности Вашего оборудования - рассчитывайте это как пример)
PS: В примере реализован не все... например что сделает мой filecmd.ini:
Нажмет три раза Enter. Зависнет на 5 секунд. Откроет окно с просьбой ввести текст, а дальше выполнит ping с параметром из введенного текста
Например как ввести "пароль": создать функцию на примере InputBox с необходимыми параметрами, чтобы вместо символов были "*"
Далее дополнить Switch очередной командой - допустим "pass" и выполнить действа аналогичные "inputbox", только со своей функцией и т.п.
Далее в файл filecmd.ini добавить строку "pass="
Создал некое подобие INI файла, но если необходимо делать различные действия (например: запустить команду в CMD; запустить hostname с параметром из переменной; отправить клавишу) да еще и с учетом, того, чтобы это все было последовательно.
Читал файл построчно и выполнял действия из структуры:
cmd=hostname
- просто запустить hostname через командную строку
hostname=
- запустить функцию (допустим GUIHostName), в которой имеется необходимый GUI. А после чего запустить саму команду
hostname=param1
- запустить функцию (допустим GUIHostName), в которой имеется необходимый GUI. А после чего запустить саму команду с параметром после "=", т.е. param1
inputbox=hostname
- запустить функцию InputBox, которая запросит дополнительный параметр. Но в итоге мы запускаем hostname через командную строку с доп.параметром указанный в InputBox
key={ENTER}
- запустить ControlSend и отправить {ENTER}
winwait=Блокнот
- Ждать окно с Title развным "Блокнот"
sleep=100
- вызвать Sleep с параметром 100
Суть заключается в следующем: первый параметр (до "=") передает что делать, а второй параметр передает уже сам параметр или что-либо.
Сама программа:
PS: у меня через "hWnd/PID" не срабатывала отправка в окно - я указал класс окна
Код:
$handle = ShellExecute ("cmd.exe","","C:\")
WinActivate($handle)
$hFile = FileOpen(@ScriptDir & '\filecmd.ini', 0)
If $hFile = -1 Then
MsgBox(4096, "Ошибка", "Невозможно открыть файл.")
Exit
EndIf
Sleep(1000)
While 1
$sCMD = FileReadLine($hFile)
If @error = -1 Then ExitLoop
$aCMD = StringSplit($sCMD, "=")
Switch $aCMD[1]
Case "key"
ControlSend("[CLASS:ConsoleWindowClass]","","",$aCMD[2])
Case 'cmd'
ControlSend("[CLASS:ConsoleWindowClass]","","",$aCMD[2]&'{ENTER}')
Case 'sleep'
If Not $aCMD[2] Then $aCMD[2] = 1000
Sleep($aCMD[2])
Case 'inputbox'
$iBox = __InputBox()
ControlSend("[CLASS:ConsoleWindowClass]","","",$aCMD[2] &' '&$iBox & '{ENTER}')
EndSwitch
Sleep(100)
WEnd
FileClose($hFile)
Func __InputBox()
Local $sValue = InputBox("Testing", "Enter code.")
Return $sValue
EndFunc
Пример файла "filecmd.ini"
Код:
key={ENTER}
key={ENTER}
key={ENTER}
sleep=5000
inputbox=ping
Пример реализации Вашего "filecmd.ini" (Внимание !!! Я не понесу какую-либо ответственность в виду последующей неисправности Вашего оборудования - рассчитывайте это как пример)
Код:
key={ENTER}
cmd=plink -serial COM2
key={ENTER}
key={ENTER}
sleep=100
cmd=enable
cmd=config terminal
inputbox=
inputbox=hostname
PS: В примере реализован не все... например что сделает мой filecmd.ini:
Нажмет три раза Enter. Зависнет на 5 секунд. Откроет окно с просьбой ввести текст, а дальше выполнит ping с параметром из введенного текста
Например как ввести "пароль": создать функцию на примере InputBox с необходимыми параметрами, чтобы вместо символов были "*"
Далее дополнить Switch очередной командой - допустим "pass" и выполнить действа аналогичные "inputbox", только со своей функцией и т.п.
Далее в файл filecmd.ini добавить строку "pass="