Absolutelight
Новичок
- Сообщения
- 4
- Репутация
- 0
Версия AutoIt: 3.
Описание:
Привет, уважаемые форумчане. Нужна ваша помощь.
Нужно, чтобы скрипт читал текстовый файл reader.txt и вписывал данные в диалоговое окно приложения autotelnet.exe (приложил). Есть исходник autotelnet на vb.net (по запросу). Так же приложил пример файл откуда читать - reader.txt
На vb.net я так и не понял как использовать правильно библиотеку user23.dll для работы с хендалами и классами полей в консольном приложении. Как их ловить и вписывать значения... Решил запускать скрипт отдельно на AutoIt.
Вот описание программы для autoit:
Вопрос, как правильно оформить while вместе с построением массива данных и передать 2 токена в окно autotelnet из этого массива ?
Вот код autoit:
Примечания:
Прикрепил autotelnet.exe
Прикрепил reader.txt
Я пытался написать эту часть на vb.net, но ничего не получилось.
Вот начало программы на vb.net:
Описание:
Привет, уважаемые форумчане. Нужна ваша помощь.
Нужно, чтобы скрипт читал текстовый файл reader.txt и вписывал данные в диалоговое окно приложения autotelnet.exe (приложил). Есть исходник autotelnet на vb.net (по запросу). Так же приложил пример файл откуда читать - reader.txt
На vb.net я так и не понял как использовать правильно библиотеку user23.dll для работы с хендалами и классами полей в консольном приложении. Как их ловить и вписывать значения... Решил запускать скрипт отдельно на AutoIt.
Вот описание программы для autoit:
Цикл:
1. Чтение из reader.txt построчно (массив?), создание двух токенов.
- Токен (0) = ip компьютера
- Токен (1) = номер компьютера
2. Запуск стороннего приложения (целевое окно) autotelnet.exe .
3. Определелить:
-Hendle окна с помощью window info
-Class поля(0)
-instance(0)
-Class поля(1)
-instance(1)
-заполнить поле(0) = Токен(0)
-заполнить поле(1) = send "q"
send "copy command-output 'show tech all' tftp Токен(0) ""SWITCH" + Токен(1) + ".txt"" "
-нажать ctrl+r (пуск)
-ожидание вывода сообщения в control id 1052122 окна: "Execution script completed"
3. Если строки кончились, то завершить.
Далее повтор цикла.
1. Чтение из reader.txt построчно (массив?), создание двух токенов.
- Токен (0) = ip компьютера
- Токен (1) = номер компьютера
2. Запуск стороннего приложения (целевое окно) autotelnet.exe .
3. Определелить:
-Hendle окна с помощью window info
-Class поля(0)
-instance(0)
-Class поля(1)
-instance(1)
-заполнить поле(0) = Токен(0)
-заполнить поле(1) = send "q"
send "copy command-output 'show tech all' tftp Токен(0) ""SWITCH" + Токен(1) + ".txt"" "
-нажать ctrl+r (пуск)
-ожидание вывода сообщения в control id 1052122 окна: "Execution script completed"
3. Если строки кончились, то завершить.
Далее повтор цикла.
Вопрос, как правильно оформить while вместе с построением массива данных и передать 2 токена в окно autotelnet из этого массива ?
Вот код autoit:
Код:
#include <file.au3>
#include <Array.au3>
local $localip = FileRead("localip.txt", 1)
; 'тут эксперементировал с ini
; 'local $getip = IniRead( $file,"1 code","ip","default" )
; 'local $getname = IniRead( $file,"1 code","value1", "default" )
local $telcode = ("q")
local $telcode2 = ("command-output 'show tech all' tftp")
local $telcode3 = ("SWITCH")
local $telcode4 = (".txt")
; вопрос как читать построчно и передавать в окно autotelnet. Записал ниже просто строки, которые помогут наверняка составить правильный код.
Global $records
If Not _FileReadToArray(@ScriptDir&'\reader.txt', $records) Then
MsgBox(4096,"Ошибка", "Невозможно прочитать массив" & @error)
Exit
EndIf
While True
; здесь нужно сделать массив, но не хватает опыта сделать правильно чтения файла и подставлять переменные в цикл.
; For $i = 1 to $token0[0] , $token1(1)
$telnet = WinWait ("AutoTelnet 1.3.0 - Telnet automation tool", "", 1)
if not ($telnet = 0) then
WinActivate ("AutoTelnet 1.3.0 - Telnet automation tool")
ControlSetText("AutoTelnet 1.3.0 - Telnet automation tool", "", "[CLASS:WindowsForms10.EDIT.app.0.141b42a_r14_ad1; INSTANCE:3]", $localip )
ControlSetText("AutoTelnet 1.3.0 - Telnet automation tool", "", "[CLASS:WindowsForms10.RichEdit20W.app.0.141b42a_r14_ad1; INSTANCE:1]", $telcode )
ControlSetText("AutoTelnet 1.3.0 - Telnet automation tool", "", "[CLASS:WindowsForms10.RichEdit20W.app.0.141b42a_r14_ad1; INSTANCE:1]", "{ENTER}")
ControlSetText("AutoTelnet 1.3.0 - Telnet automation tool", "", "[CLASS:WindowsForms10.RichEdit20W.app.0.141b42a_r14_ad1; INSTANCE:1]", $telcode2+$token0+$telcode3+$token1+$telcode4 )
send ("{CTRLDOWN}")
send ("{r}")
send ("{CTRLUP}")
Sleep(5000)
ControlGetText("AutoTelnet 1.3.0 - Telnet automation tool", "Execution script completed", 1052122 )
Next
Endif
Wend
Примечания:
Прикрепил autotelnet.exe
Прикрепил reader.txt
Я пытался написать эту часть на vb.net, но ничего не получилось.
Вот начало программы на vb.net:
Module Module 1
Function Main() As Integer
'читаем reader.txt
Using InStream As StreamReader = New StreamReader("reader.txt", System.Text.Encoding.GetEncoding(1251))
' Read first line.
txtLine2 = InStream.ReadLine
Do While (Not txtLine2 Is Nothing)
'OutStream.WriteLine(txtLine)
'Console.WriteLine(txtLine2)
' 0 1
'1234|10.160.43.128
'2345|10.160.43.129
'6666|10.160.43.145
tokens = Split(txtLine2, "|")
Dim StoreID As String = tokens(0)
Dim IP_SW As String = tokens(1)
'вот здесь проблемы
'Using OutStream As StreamWriter = ???
'OutStream.WriteLine("q")
'OutStream.WriteLine("copy command-output 'show tech all' tftp " + IP_SW + " SWITCH" + StoreID + ".txt")
'после этого автотелнет должен конфиг вида SWITCH1234.txt
'читаем SWITCH1234.txt, ищем Serial Number : CN62DRW0BC, запиываем значение в reader_out.txt
Using InStream2 As StreamReader = New StreamReader(".\configs\SWITCH" + StoreID + ".txt", System.Text.Encoding.GetEncoding(1251))
' Read first line.
txtLine3 = InStream2.ReadLine
Do While (Not txtLine3 Is Nothing)
' 0 1 2
' ROM Version : RA.15.11 Serial Number : CN62DRW0BC
If txtLine3.Contains("Serial Number") Then
tokens2 = Split(txtLine3, ": ")
Dim SN As String = tokens2(2)
tokens2 = Split(SN, " ")
SN = tokens2(1)
Using OutStream As StreamWriter = New StreamWriter("reader_out.txt", True, System.Text.Encoding.GetEncoding(1251))
OutStream.WriteLine(txtLine2 + "|" + SN)
End Using
End If
txtLine3 = InStream2.ReadLine
Loop
End Using
txtLine2 = InStream.ReadLine
Loop
End Using
'txtLine = InStream.ReadLine
'loop
Next
'End Using
'===================
Catch ex As Exception
Console.WriteLine("Error: Insert is not success." + " " + ex.Message)
Console.WriteLine("It's seems that all configs are downloaded.")
Console.WriteLine("Press any key to continiue...")
Console.ReadKey()
Return 2
End Try
End Function
End Module
Function Main() As Integer
'читаем reader.txt
Using InStream As StreamReader = New StreamReader("reader.txt", System.Text.Encoding.GetEncoding(1251))
' Read first line.
txtLine2 = InStream.ReadLine
Do While (Not txtLine2 Is Nothing)
'OutStream.WriteLine(txtLine)
'Console.WriteLine(txtLine2)
' 0 1
'1234|10.160.43.128
'2345|10.160.43.129
'6666|10.160.43.145
tokens = Split(txtLine2, "|")
Dim StoreID As String = tokens(0)
Dim IP_SW As String = tokens(1)
'вот здесь проблемы
'Using OutStream As StreamWriter = ???
'OutStream.WriteLine("q")
'OutStream.WriteLine("copy command-output 'show tech all' tftp " + IP_SW + " SWITCH" + StoreID + ".txt")
'после этого автотелнет должен конфиг вида SWITCH1234.txt
'читаем SWITCH1234.txt, ищем Serial Number : CN62DRW0BC, запиываем значение в reader_out.txt
Using InStream2 As StreamReader = New StreamReader(".\configs\SWITCH" + StoreID + ".txt", System.Text.Encoding.GetEncoding(1251))
' Read first line.
txtLine3 = InStream2.ReadLine
Do While (Not txtLine3 Is Nothing)
' 0 1 2
' ROM Version : RA.15.11 Serial Number : CN62DRW0BC
If txtLine3.Contains("Serial Number") Then
tokens2 = Split(txtLine3, ": ")
Dim SN As String = tokens2(2)
tokens2 = Split(SN, " ")
SN = tokens2(1)
Using OutStream As StreamWriter = New StreamWriter("reader_out.txt", True, System.Text.Encoding.GetEncoding(1251))
OutStream.WriteLine(txtLine2 + "|" + SN)
End Using
End If
txtLine3 = InStream2.ReadLine
Loop
End Using
txtLine2 = InStream.ReadLine
Loop
End Using
'txtLine = InStream.ReadLine
'loop
Next
'End Using
'===================
Catch ex As Exception
Console.WriteLine("Error: Insert is not success." + " " + ex.Message)
Console.WriteLine("It's seems that all configs are downloaded.")
Console.WriteLine("Press any key to continiue...")
Console.ReadKey()
Return 2
End Try
End Function
End Module