Показать полную графическую версию : [Архив - Часть 1.2] AutoIt скрипты
Столкнулся еще с одной проблемой: устанавливаю pdfFactory Pro 2.5! Инсталлятор кривучий такой или руки у меня такие, незнаю. В конце инсталляции вываливается информационное окно с кнопкой 'OK'. Его ничем не могу отловить, не WinWait, не WinActive, не WinWaitActive не помогает!!! Если кто с такой прогой сталкивался или мож знает как всетаки 'нажать' эту кнопку подскажите плиз...Send("{SPACE}")
nsergeip
06-03-2006, 13:46
amel27 я делал Send("{ENTER}")! не работает, как будто операция раньше появления окна проходит, или вообще не выполняется, что-то не пойму!?
Написал скрипт для запуска подряд других скриптов (на данный момент для автоматизации установки программ). Но автоиту не нравится выделенная строка:
#include <GUIConstants.au3>
$mainwindow = GUICreate("Installer", 400, 300)
$label1 = GUICtrlCreateLabel("Select programs to install", 10, 10, 200)
$list1 = GUICtrlCreateTreeView(10, 30, 380, 240, BitOr($TVS_CHECKBOXES, $TVS_DISABLEDRAGDROP))
$cmdinstall = GUICtrlCreateButton("Install", 10, 270, 110)
$cmdcancel = GUICtrlCreateButton("Cancel", 120, 270, 110)
GUISetState(@SW_SHOW, $mainwindow)
$installlist = IniReadSection("installer.ini", "Programs")
If @error Then
MsgBox(4096, "", "Error with INI")
Else
Dim $items[$installlist[0][0]]
For $c = 1 To $installlist[0][0]
$item = GUICtrlCreateTreeViewItem($installlist[$c][0], $list1)
$items[$c] = $item
Next
EndIf
Do
$msg = GUIGetMsg()
Select
Case $msg = $cmdinstall
For $i = 1 To $installlist[0][0]
If GUICtrlRead($items[$i]) = $GUI_CHECKED Then
RunWait($installlist[$i][1])
EndIf
Next
Case $msg = $cmdcancel
GUIDelete()
Exit
EndSelect
Until $msg = $GUI_EVENT_CLOSE or $msg = $cmdcancel
Что я делаю не так и как это должно быть на самом деле?
Sanja Alone
07-03-2006, 03:35
nsergeip
Если кто с такой прогой сталкивался или мож знает как всетаки 'нажать' эту кнопку подскажите плиз...Не сталкивался, но, если ты здесь приведешь инфу о той кнопке, полученную с пом. AutoIt Window Info ("%ProgramFiles%\AutoIt3\AU3Info.exe"), то, скорее всего, решение найдется (для фиксации показаний в окне AutoIt Window Info нужно нажать Ctrl+Alt+F). А для начала можешь попробовать способ из FAQ (http://oszone.net/display.php?id=3663) (раздел "Вввод данных / работа с элементами управления", пункты 5, 6, 7).
Shaul
Счет элементов массива начинается с 0, нужно так:
For $c = 0 To $installlist[0][0]-1
...
Next
nsergeip
как будто операция раньше появления окна проходитSleep (1000)
Send("{SPACE}")Извиняюсь, забыл паузу вставить. Время ожидания подбирается опытным путем. Если срабатывает с клавы, значит будет работать и из AutoIT. В самых тяжелых случаех приходилось даже прибегать к MouseClick().
amel27
[Shaul
Счет элементов массива начинается с 0, нужно так:
Код:
For $c = 0 To $installlist[0][0]-1
...
Next
В элементе [0][0] содержится количество элементов массива, поэтому я начинаю с $c = 1. Проблема в другом. Автоиту не нравится то, как я назначил количество элементов в массиве $items, который я использую, чтобы впоследствии обратиться к конкретному элементу списка $list1. Еще одна проблема в том, что нужно как-то перехватывать событие выбора чекбокса в графике и где-то отмечать, что этот элемент $items[$c] выбран ($GUI_CHECKED)
Извините за тупость вопроса но очень нужно сделать такое. Имеется назначение клавиши например:
HotKeySet("{F1}", "go")
Можно ли сделать например какой нибудь ini файл или что нибудь такое, откуда будет тянуться значение клавиши в данном случае F1. Что бы просто можно было быстро поменять значение.
Приветствую.
Выполняю такой коротенький скрипт
Run( \\\\mycomp\\auditscaner\\ina32.exe (http://////neiwton//auditscaner//ina32.exe))
Send("{Enter}")
почему-то запускается несколько экземпляров ina32.exe
Окно не имеет заголовка.
в чем может быть дело?
Заранее спасибо.
Shaul
Автоиту не нравится то, как я назначил количество элементов в массиве $items, который я использую, чтобы впоследствии обратиться к конкретному элементу спискаВот-вот, если кол-во элементов массива N, то корректные индексы массива будут от 0 до (N-1), а при обращении к эл-ту $items(N) вывалится ошибка, кстати очень правильная! :)The number of elements to create for the array dimension, indexed 0 to n-1.
Как с помощью AutoIt узнать что директория, а что файл? Я сделал так, но может можно проще
If FileChangeDir("C:\Windows") Then
MsgBox (0, "Info", "This is Directory!", "")
Else
MsgBox (0, "Info", "This is File!", "")
EndIF
Sanja Alone
08-03-2006, 03:43
Paki
Можно ли сделать например какой нибудь ini файл или что нибудь такое, откуда будет тянуться значение клавишиЕс-но, можно - FAQ (http://oszone.net/display.php?id=3663) (раздел "Работа с ini-файлами"). Код буде выглядеть примерно так: $ini=@ScriptDir & '\my.ini'
$HotKey=IniRead($ini,"Section","HotKey","{F1}") ;последний параметр - значение по ум. (если параметр HotKey отсутствует в файле или ini-файла вообще нет)
HotKeySet("'"&$HotKey&"'", "go")
Snejok
Так же, как из командной строки - используя обратный слэш в конце имени, пример:
; Прием параметра из командной строки
If $CmdLine[0]=0 Then
Exit
Else
$file=$CmdLine[1]
EndIf
; Убираем оконечные слэши
While StringRight($file,1)="\"
$file=StringLeft($file,StringLen($file)-1)
Wend
; Определяем тип
If FileExists ($file & "\") Then
MsgBox(0,"","This is Directory!")
Else
If FileExists ($file) Then
MsgBox(0,"","This is File!")
Else
MsgBox(0,"","File or Directory Not Exist!")
EndIf
EndIf
Уточнение получения объекта AutoIt3X при технологии VBScript.
Запись из AutoIt_ru.chm для AutoIt3X, которая приведена ниже, машина
в моем случае применения метода CreateObject() воспринимает как 429-ю
ошибку -- не может создать объект! Поэтому надо ли указывать путь к
autoit3.exe? Или запись, которая ниже, позволяет найти autoit3.exe где
угодно, даже на съемном диске (USB-диске)? Или моя первая строка для
"fso" обладает недостатком, который приводит к невозможности создания
объекта "oAutoIt" при записи из AutoIt_ru.chm? Также есть ли какая-л.
литература на рус. языке с примерами применения AutoIt3Х? Пожалуйста,
подскажите решение для CreateObject(" ???? ").
Dim fso, oAutoIt
Set fso = GetObject("c:\windows\wscript.exe", "WScript.Application")
Set oAutoIt = fso.CreateObject("AutoItX3.Control")
oAutoIt.WinClose "Microsoft Internet Explorer", ""
rhtu
Set oAutoIt = WScript.CreateObject("AutoItX3.Control")
oAutoIt.WinClose "Untitled - Notepad", ""Пример взят из справки
nsergeip
09-03-2006, 07:36
Не сталкивался, но, если ты здесь приведешь инфу о той кнопке, полученную с пом. AutoIt Window Info ("%ProgramFiles%\AutoIt3\AU3Info.exe"), то, скорее всего, решение найдется (для фиксации показаний в окне AutoIt Window Info нужно нажать Ctrl+Alt+F). А для начала можешь попробовать способ из FAQ (раздел "Вввод данных / работа с элементами управления", пункты 5, 6, 7).
Вот информация полученная autoit
>>>>>>>>>>>> Window Details <<<<<<<<<<<<<
Title: pdfFactory Pro
Class: #32770
Size: X: 420 Y: 206 W: 524 H: 133
>>>>>>>>>>> Mouse Details <<<<<<<<<<<
Screen: X: 675 Y: 311
Cursor ID: 2
>>>>>>>>>>> Pixel Color Under Mouse <<<<<<<<<<<
RGB: Hex: 0xECE9D8 Dec: 15526360
>>>>>>>>>>> Control Under Mouse <<<<<<<<<<<
Size: X: 221 Y: 67 W: 75 H: 23
Control ID: 2
ClassNameNN: Button1
Text: ОК
>>>>>>>>>>> Status Bar Text <<<<<<<<<<<
>>>>>>>>>>> Visible Window Text <<<<<<<<<<<
ОК
pdfFactory Pro was successfully installed!
To use pdfFactory Pro, just print to the pdfFactory Pro printer from any Windows application.
>>>>>>>>>>> Hidden Window Text <<<<<<<<<<<
скрипт вот такой писал, не работает почему-то
WinWaitActive("pdfFactory Pro","OK")
Send("{TAB}")
Send("{ENTER}")
Имеется такой скрипт.
run("\\neiwton\auditscaner\ina32.exe")
sleep(200)
WinActivate("")
sleep(200)
send("{Enter}")
sleep(200)
WinWaitActive("Inventory Analyzer")
sleep(200)
send("{Enter}")
Когда я запускаю его ,все работает ,как надо.
1) Когда я закидываю его в автозапуск : ina32.exe при входе в систему появляется ,но на окне нет фокуса, соответственно я не могу послать в окно нажатие клавиши.Даже не представляю почему WinActivate("") не срабатывает(у окна нет заголовка т.е. title). !!??
2)как можно послать {Enter} определенной кнопке на окне?
Заранее спасибо.
nsergeip
09-03-2006, 08:50
Вот скрипт
Run("Setup.exe")
WinWaitActive("pdfFactory Pro","Да")
Send("{ENTER}")
WinWaitActive("pdfFactory Pro License Agreement","accept the terms")
Send("{TAB}")
Send("{ENTER}")
WinWait("pdfFactory Pro")
if WinWaitActive("pdfFactory Pro","Да",2) Then
Send("{TAB}")
Send("{ENTER}")
WinWaitActive("pdfFactory Pro","ОК")
Send("{TAB}")
Send("{ENTER}")
Else
WinWaitActive("pdfFactory Pro","ОК")
Send("{TAB}")
Send("{ENTER}")
EndIf
Этим скриптом я устанавливаю pdfFactory/ Проблема в том что если на компе установлена уже эта программа то окно
Press CTRL-ALT-F to pause the display.
>>>>>>>>>>>> Window Details <<<<<<<<<<<<<
Title: pdfFactory Pro
Class: #32770
Size: X: 429 Y: 341 W: 620 H: 126
>>>>>>>>>>> Mouse Details <<<<<<<<<<<
Screen: X: 536 Y: 431
Cursor ID: 2
>>>>>>>>>>> Pixel Color Under Mouse <<<<<<<<<<<
RGB: Hex: 0xECE9D8 Dec: 15526360
>>>>>>>>>>> Control Under Mouse <<<<<<<<<<<
Size:
Control ID:
ClassNameNN:
Text:
>>>>>>>>>>> Status Bar Text <<<<<<<<<<<
>>>>>>>>>>> Visible Window Text <<<<<<<<<<<
&Да
&Нет
Setup found settings from a previous installation of pdfFactory Pro. Would you like to import those settings now?
>>>>>>>>>>> Hidden Window Text <<<<<<<<<<<
появляется, но если уже программа была у становлена то оно не появляется.
ВОПРОС: как написать этот скрипт правильно, так чтобы было предусмотрено то что программа уже имеется, и то что ее еще нет.
Sanja Alone
09-03-2006, 09:15
All
На этом форуме принято приводить листинги внутри тэга code (http://forum.oszone.net/misc.php?do=bbcode#code) !
По теме - Прочтите FAQ (http://oszone.net/display.php?id=3663) !!!
nsergeip
не работает почемутоДа потому, что у тебя (скорее всего) в каждом окне текст "ОК" есть :) Попробуй так (это очень перестраховочный способ):
WinWait("pdfFactory Pro","successfully installed")
WinActivate("pdfFactory Pro","successfully installed")
WinWaitActive("pdfFactory Pro","successfully installed")
Send("{TAB}")
Send("{ENTER}")А на эту кнопку можно и сразу нажать: ControlClick("pdfFactory Pro","successfully installed","Button1")
Вот скрипт
фрагмент:
if WinWaitActive("pdfFactory Pro","Да",2) Then
Send("{TAB}")
Send("{ENTER}")
WinWaitActive("pdfFactory Pro","ОК")
Send("{TAB}")
Send("{ENTER}")
Else
WinWaitActive("pdfFactory Pro","ОК")
Send("{TAB}")
Send("{ENTER}")
EndIf
заменить на:
if WinWait("pdfFactory Pro","Да",2) Then
WinActivate("pdfFactory Pro","Да")
WinWaitActive("pdfFactory Pro","Да")
Send("{TAB}")
Send("{ENTER}")
EndIf
WinWaitActive("pdfFactory Pro","ОК")
Send("{TAB}")
Send("{ENTER}")Этот способ (наряду с другими) описан в FAQ, а вопрос неоднократно разбирался в старой теме (http://forum.oszone.net/showthread.php?t=46951) - начни с этого (http://forum.oszone.net/showthread.php?t=46951&page=4&pp=40#post358608) поста и прочитай ответы на него.
dark_n
WinActivate("")
Пустые кавычки в кач-ве аргумента означают последнее активное окно, а при старте из автозапуска вполне возможно, что нужное тебе окно не является таковым. Нужно вписать хотя-бы что-то из этого окна (если нет заголовка, то можно написать WinActivate("","Текст")).
ControlClick, ControlSend.
run("\\neiwton\auditscaner\ina32.exe")
sleep(2000)
WinActivate("", "Inventory Anlyzer")
sleep(200)
WinWaitNotActive("","Inventory Anlyzer")
send("{Enter}")
sleep(200)
WinActive("Inventory Analyzer")
sleep(200)
send("{Enter}")
почему-то при первом входе в систему(exe-шник скрипта выполняется при входе в систему)
WinActivate("", "Inventory Anlyzer") не срабатывает,окно не активно
когда я делаю выход из системы а
затем вход- фокус появляется и все нормально.Почему так?.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.