Показать полную графическую версию : [архив - Часть 2] AutoIt скрипты
SergeyAV
13-12-2007, 09:07
Нужно везде ставить проверки, на существования окна, активность окна, и т.п. »
Это типа:
WinWait
WinActivate
WinWaitActive ?
Попробую...
А также все Send() наверняка можно переделать в ControlClick, но точно сказать немогу, негде проверить. »
'ControlClick' - это что-то с мышкой связанное? Я думал, лучше отказаться от этого, пользваться исключительно клавишами. Но у меня нет большого опыта в этих делах...
Да, в начало скрипта поставь #NoTrayIcon »
Спасибо, попробую.
TERMINAL
13-12-2007, 09:32
Creat0R, чего-то я не пойму где здесь прописовать какие копировать папки и куда.......
SergeyAV, 'ControlClick' - это что-то с мышкой связанное?
Это нажимает на определённый элемент (кнопка и т.п)...
Чтобы узнать класс/имя элемента, нужно использовать инструмент Au3Info (вместе с AutoIt идёт).
Вот немного подправленая версия твоего скрипта, я добавил немного комментов, присмотрись к ним ;)
; User Var's
$SF_1 = "setup.exe" ; Setup File Name
$UR_1 = "xxx" ; User Registration Code Part 1
$UR_2 = "xxxxxxxx" ; User Registration Code Part 2
$UR_3 = "Name" ; User Registration Name
$UR_4 = "o" ; User Registration Surname
$UR_5 = "Firme" ; User Registration Organization
$UR_6 = "o" ; User Registration Supplier
$UR_7 = "o" ; User Registration Phone No.
Run($SF_1)
; Welcome
WinWait ("Установка Autodesk","Перед установкой AutoCAD 2006 ","Button1")
ControlClick ("Установка Autodesk","Перед установкой AutoCAD 2006 ","Button1")
WinWait ("Установка AutoCAD 2006","Добро пожаловать в Мастер уста","Button1")
ControlClick ("Установка AutoCAD 2006","Добро пожаловать в Мастер уста","Button1")
; License
WinWait("Установка AutoCAD 2006","Страна или территори")
WinActivate("Установка AutoCAD 2006","Страна или территори")
;Если используется AutoIt 3.2.10.0, то можно перед Send использовать SendKeepActive("Заголовок", "Текст").
Send("{TAB}{TAB}{UP}{ENTER}") ; Это можно заменить на ControlClick(...).
; Serial
WinWait("Установка AutoCAD 2006","Серийный номер ")
WinActivate("Установка AutoCAD 2006","Серийный номер ")
;Тут можно заменить на ControlSetText("Установка AutoCAD 2006", "", "Edit?") - где "?" нужно узнать идентификатор (Au3Info Tool)
SEND ( $UR_1 )
;Тут тоже можно заменить на ControlSetText(...)
SEND ( $UR_2 )
ControlClick ( "Установка AutoCAD 2006", "", "Button1" )
; User Information
WinWait("Установка AutoCAD 2006","Укажите в полях этог")
WinActivate("Установка AutoCAD 2006","Укажите в полях этог")
SEND ( $UR_3 ) ;Тут тоже можно заменить на ControlSetText(...)
SEND ("{TAB}") ;Это тогда не нужно будет
SEND ( $UR_4 ) ;Тут тоже можно заменить на ControlSetText(...)
SEND ("{TAB}") ;Это тогда не нужно будет
SEND ( $UR_5 ) ;Тут тоже можно заменить на ControlSetText(...)
SEND ("{TAB}") ;Это тогда не нужно будет
SEND ( $UR_6 ) ;Тут тоже можно заменить на ControlSetText(...)
SEND ("{TAB}") ;Это тогда не нужно будет
SEND ( $UR_7 ) ;Тут тоже можно заменить на ControlSetText(...)
SEND ("{TAB}") ;Это тогда не нужно будет
; почему не используется?
;ControlClick ( "Установка AutoCAD 2006", "", "Button4" )
Send("{ENTER}")
Sleep ( 250 )
Send("{ENTER}")
Sleep ( 250 )
Send("{ENTER}")
Sleep ( 250 )
Send("{ENTER}")
Sleep ( 250 )
Send("{ENTER}")
Sleep ( 250 )
Send("{ENTER}")
; Install Ends
WinWait( "Установка AutoCAD 2006","В&ывести файл Readme")
ControlClick ( "Установка AutoCAD 2006", "", "Button1" )
Sleep(1000)
Send("{SPACE}") ;Тут видимо можно заменить на ControlClick ( "Установка AutoCAD 2006", "", "Button?" )
Send("{ENTER}") ;И Тут.
P.S
Если AutoCad небольшая прога, могу потестить (чтобы усовершенствовать скрипт), всё ровно скоро систему нужно переустанавливать :)
TERMINAL
13-12-2007, 09:51
SergeyAV, У меня тожк такая же проблема была с AutoCAD 2005-это клас из тех программ которые начинают себя неправильно вести при установке винды (я так думаю из-за отсутсвия драйверов). Я его оложил в долгий ящик, но скоро им займусь, если нужно- через неделю можешь спросить, может чем то помогу.
Creat0R, AutoCAD 2005 прога большая- у меня она помоему 400 мег.
TERMINAL, где здесь прописовать какие копировать папки и куда
В скрипте с примером (Copy With Progress Example.au3)... первый параметр путь к папке которую нужно скопировать, второй параметр путь назначения (куда помещать скопированные файлы), третьи указывает метод замены (0 - не заменять существующие файлы, 1 - заменять).
Всё довольно просто ;).
SergeyAV
13-12-2007, 15:12
Это нажимает на определённый элемент (кнопка и т.п)... »
Ясно.
Чтобы узнать класс/имя элемента, нужно использовать инструмент Au3Info (вместе с AutoIt идёт). »
Ага! Вот этого мне и не хватало - я с AutoIt только начинаю разбираться...
Вот немного подправленая версия твоего скрипта, я добавил немного комментов, присмотрись к ним »
Спасибо.
Если AutoCad небольшая прога, могу потестить (чтобы усовершенствовать скрипт), всё ровно скоро систему нужно переустанавливать »
Она "немножко" большая - почти 600М ;). Хотя и хорошо пакуется - до 400М.
TERMINAL,
У меня тожк такая же проблема была с AutoCAD 2005-это клас из тех программ которые начинают себя неправильно вести при установке винды (я так думаю из-за отсутсвия драйверов). »
Драйвера все установлены; да и не причем тут это - не нужны Автокаду никакие драйвера. Другое дело, что установщик себя ведет действительно странно, но проблема решается другим способом, к топику отношения не имеющем.
Подробнее здесь:
http://forum.oszone.net/thread-61866.html
В 2-х словах: создается админстративная точка (модификация дистрибутива, точнее .msi), которая потом уже без проблем устанавливается...
Но с AutoIt разобраться все равно хотелось бы, хотя бы потому, что есть много других прог, где "автокадный способ" не прокатит...
HORRIBLE
13-12-2007, 16:46
Ребят, подскажите. Это про калькулятор ).
1
...
$CTRL_btn1 = GUICtrlCreateButton("1", 54, 138, 36, 29)
$CTRL_btn2 = GUICtrlCreateButton("2", 93, 138, 36, 29)
$CTRL_btn3 = GUICtrlCreateButton("3", 132, 138, 36, 29)
$CTRL_btn4 = GUICtrlCreateButton("4", 54, 106, 36, 29)
$CTRL_btn5 = GUICtrlCreateButton("5", 93, 106, 36, 29)
$CTRL_EdtScreen = GUICtrlCreateEdit("0.", 8, 2, 239, 23,BitOR($ES_READONLY, $ES_RIGHT),$WS_EX_STATICEDGE)
$CTRL_LblMemory = GUICtrlCreateLabel("", 12, 39, 27, 26)
GUISetState (@SW_SHOW )
While 1
$msg = GUIGetMsg()
select
Case $msg = $CTRL_btn0
GUICtrlSetData($CTRL_EdtScreen, $CTRL_btn1 )
EndSelect
WEnd
Почему он в поле $CTRL_EdtScreen вводит 4 ??(причем если помять кнопку не $CTRL_btn1 а там например $CTRL_btn5 поставить, то покажит вместо 5 на 3 больше, т.е. 8) или так нельзя задавать значения, а только так GUICtrlSetData($CTRL_EdtScreen, "1")
Но если так писать то в поле $CTRL_EdtScreen получается вводить ток по 1 цифре, а как быть если нужно ввести 2 и более.
....
2. Я так понимаю первую цифру при нажатии кнопки + он заносит в память, а дальше все тупик для меня(
у меня получается нажимаю цифру 5 потом нажимаю + и он мне складывает 5+5 пишет 10(хорошо хоть правильно получилось сложить:) )
А как сделать, чтоб при нажатии + он складывал то, что в памяти с той цифрой которую я ввел после нажатия +.
Спасибо.
HORRIBLE,
Простой(?) пример калькулятора:
#include <GuiConstants.au3>
Global $aButtons_Arr[11]
Global $aOperations_Arr[1]
$Left = 60
$Top = 140
$Gui = GuiCreate("Calculator - Demo", 240, 290)
$CTRL_Edit = GUICtrlCreateEdit(0, 8, 2, 220, 23, BitOR($ES_READONLY, $ES_RIGHT), $WS_EX_STATICEDGE)
GUICtrlCreateGroup("Operations", 10, 25, 220, 90)
$Plus_Button = GUICtrlCreateButton("+", 20, 40, 25, 20)
$Minus_Button = GUICtrlCreateButton("-", 50, 40, 25, 20)
$Devide_Button = GUICtrlCreateButton("/", 80, 40, 25, 20)
$Multiply_Button = GUICtrlCreateButton("*", 110, 40, 25, 20)
GuiCtrlCreateSeperator(1, 142, 40, 3, 20)
$Pi_Button = GUICtrlCreateButton("Pi", 150, 40, 30, 20)
$Sqrt_Button = GUICtrlCreateButton("Sqrt", 190, 40, 30, 20)
GuiCtrlCreateSeperator(0, 18, 70, 3, 205)
$Equel_Button = GUICtrlCreateButton("=", 20, 80, 60, 25)
$CE_Button = GUICtrlCreateButton("CE", 150, 80, 70, 25)
GUICtrlCreateGroup("Digits", 10, 125, 220, 150)
For $i = 1 To 9
If $Left >= 180 Then
$Left = 60
$Top += 32
EndIf
$aButtons_Arr[$i] = GUICtrlCreateButton($i, $Left, $Top, 36, 29)
$Left += 40
Next
;Забыл нолик :D
$aButtons_Arr[10] = GUICtrlCreateButton("0", 60, 240, 115, 29)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $aButtons_Arr[1] To $aButtons_Arr[10]
Local $iUbound = UBound($aOperations_Arr)
If $iUbound > 1 And StringIsDigit($aOperations_Arr[$iUbound-1]) Then
$aOperations_Arr[$iUbound-1] &= GUICtrlRead($nMsg, 1)
$iUbound -= 1
Else
ReDim $aOperations_Arr[$iUbound+1]
$aOperations_Arr[$iUbound] = GUICtrlRead($nMsg, 1)
EndIf
GUICtrlSetData($CTRL_Edit, $aOperations_Arr[$iUbound])
Case $Plus_Button To $Multiply_Button
Local $iUbound = UBound($aOperations_Arr)
If $iUbound <= 1 Or $aOperations_Arr[$iUbound-1] = GUICtrlRead($nMsg, 1) Then ContinueLoop
ReDim $aOperations_Arr[$iUbound+1]
$aOperations_Arr[$iUbound] = GUICtrlRead($nMsg, 1)
Case $Equel_Button
Local $Operations_Str = ""
For $i = 1 To UBound($aOperations_Arr)-1
$Operations_Str &= $aOperations_Arr[$i]
Next
ClearOperations()
$sResults = Execute($Operations_Str)
If $sResults = "" Then $sResults = 0
GUICtrlSetData($CTRL_Edit, $sResults)
Case $Pi_Button
ClearOperations()
GUICtrlSetData($CTRL_Edit, Pi_Calculate())
Case $Sqrt_Button
Local $ReadEdit = GUICtrlRead($CTRL_Edit)
If $ReadEdit <= 0 Then ContinueLoop
ClearOperations()
GUICtrlSetData($CTRL_Edit, Sqrt($ReadEdit))
Case $CE_Button
ClearOperations()
GUICtrlSetData($CTRL_Edit, "0")
EndSwitch
WEnd
Func ClearOperations()
$aOperations_Arr = ""
Dim $aOperations_Arr[1]
EndFunc
Func Pi_Calculate($iRound = 100000)
Local $n = 0
For $i = 1 To $iRound
$n += 1 / ($i * $i)
Next
Return Sqrt($n * 6)
EndFunc
Func GuiCtrlCreateSeperator($Direction, $Left, $Top, $Width=3, $Lenght=25)
Switch $Direction
Case 0
GUICtrlCreateLabel("", $Left, $Top, $Lenght, $Width, $SS_SUNKEN)
Case 1
GUICtrlCreateLabel("", $Left, $Top, $Width, $Lenght, $SS_SUNKEN)
EndSwitch
EndFunc
Maza Faka
14-12-2007, 08:14
Creat0R
AutoIt Menu для Opera
Не могу скачать, перезалей куда-нибудь.
TERMINAL
14-12-2007, 09:26
SergeyAV, уж если хочешь разобраться с AutoIt, тогда советую написать скрипт к DivX 6.7+keygen ! Вот когда напишешь, будешь больше знать чем сейчас (если ты новичёк). Только условие-при региистрации не вводить ключ к с AutoIt, а бери его с кеуgena...
Другой вариант-я лично учился на примерах от Sanya Alone (http://sanjaalone.h15.ru/au3.php), от его примеров подчёркивал самое важное...
SergeyAV
14-12-2007, 10:20
SergeyAV, уж если хочешь разобраться с AutoIt, тогда советую написать скрипт к DivX 6.7+keygen ! »
Зачем? Я не использую DivX (для кодирования), предпочитаю смотреть "чистое, неиспорченное видео". А для редкого просмотра на компе и декодера хватает - он то уж регистрируется куда как проще ;).
А применительно к топику (AutoIt) есть куда больше животрепещущих вопросов...
TERMINAL
14-12-2007, 12:10
SergeyAV, Я промолчу... Мы разговариваем на разных языках.... Не будем вести дискусию не по теме !
TERMINAL
14-12-2007, 13:33
Creat0R, Помоги плз... Внизу приложеный скрипт-проблема такая, нужно чтобы после сообщения галочка изчезала в Checkbox1.
#include <GUIConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Oszone.net", 413, 298, 303, 219)
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 152, 128, 97, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Checkbox1
MsgBox(64,"Test","test",3)
GUICtrlSetState(@SW_SHOW, $GUI_UNCHECKED)
EndSwitch
WEnd
Kenwood3D
14-12-2007, 17:47
Подскажите как в "Подключение по локальной сети - свойства" -> Настроить -> "Свойства: " выбрать закладку "Дополнительно" и там выбрать свойство "Сетевой адрес"? А то видемо из-за закладок не могу определить ClassNameNN списка. »
Creat0R
Почему то твой способ ни на одной закладке на работает.
Пример:
#include <ControlTab.au3>
Run ("rundll32 shell32,Control_RunDLL main.cpl @0")
$ConnPropTitle = 'Свойства: Мышь'
$TabText = "Параметры указателя"
WinWait($ConnPropTitle)
$iIndex = _ControlTab($ConnPropTitle, "", "FindTab", $TabText, "", True)
_ControlTab($ConnPropTitle, "", "TabSelect", $iIndex)
Все верно? Не работает
TERMINAL
14-12-2007, 18:56
Возможно ли при установке Windows XP, после копирования файлов, после 1й перезагрузки, заставить работать скрипт?
TERMINAL, нужно чтобы после сообщения галочка изчезала в Checkbox1
Мне просто интересно, что это:
GUICtrlSetState(@SW_SHOW, $GUI_UNCHECKED)
?
:)
Выдели слово GUICtrlSetState (или просто поставь на нём курсор), и нажми F1 - увидишь справку для этой команды ;).
GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
Там должен быть ID контроля а не @SW_SHOW.
Kenwood3D, Почему то твой способ ни на одной закладке на работает
Странно, у меня вылетает ошибка о запуске Rundll32 (только с этим диалогом)... ошибка явно в строке:
DllCall("user32.dll", "long", "SendMessage", "hwnd", $hTab, "int", $TCM_GETITEM, "int", $sParam1, "int", $pItem)
(это при получении текста вкладки)
Вот так вроде работает:
Run ("rundll32 shell32,Control_RunDLL main.cpl @0")
$ConnPropTitle = 'Свойства: Мышь'
WinWait($ConnPropTitle)
_ControlTab($ConnPropTitle, "", "TabSelect", 2)
Но понимаю что это не выход, у тебя это может быть и не третья вкладка слева...
HORRIBLE
14-12-2007, 21:04
Creat0R
Спасибо за калькуль, а можешь объяснить несколько строк из кода:
1. Switch $nMsg
Case -3
Что здесь означеет -3
...........
2. UBound($aOperations_Arr) - зачем, с какой целью мы делаем возрат размерности массива.
3. If $iUbound <= 1 Or $aOperations_Arr[$iUbound-1] = GUICtrlRead($nMsg, 1) Then ContinueLoop
ReDim $aOperations_Arr[$iUbound+1]
$aOperations_Arr[$iUbound] = GUICtrlRead($nMsg, 1)
что тут такое выполняется и зачем это сравнение?
4 и все таки как он складывает или умножает, где это в коде ,видно, но как ?????
Спасибо.
Maza Faka,
перезалей куда-нибудь
Зеркало (http://www.autoitscript.com/forum/index.php?automodule=downloads&req=download&code=confirm_download&id=106) ;).
HORRIBLE,
Что здесь означеет -3
$GUI_EVENT_CLOSE
с какой целью мы делаем возрат размерности массива
Чтобы обьявить массив по новой, присвоив ему ещё одно значение (+1).
что тут такое выполняется и зачем это сравнение?
Проверяется последняя запись, если она ровна операции (- + / *) которая запрпашивается пользователем, то ничего не делаем (ContinueLoop), а далее просто обьявляется массив по новой (плюс ещё один элемент), и добавляется новое знчение (цифра или другая операция, хотя в данном случае только операция).
как он складывает или умножает, где это в коде ,видно, но как ?
По нажатию на ровно ( = ) весь собранный нами ранее массив перечитывается, все его значения складываются в обычную строку ($Operations_Str), а потом используется встроенная функция Execute(), позволяет получить абсолютное значение данных в строке.
P.S
Чуть позже выложу другую версию калькулятора, где поддерживаются хоткеи, а также ещё несколько улучшении ;)
HORRIBLE
15-12-2007, 00:24
Creat0R,
$Plus_Button
$Minus_Button
$Devide_Button
$Multiply_Button
это получается стандартное обозначение сложения, вычитания и т.д. ?? А вот, а откуда берутся данные, что я нажал на кнопку деления, ведь ты же не записывал алгоритм, что делим одно число на другое ?
А только указываешь с какой по какую кнопку. Я правильно думаю, что об операции которую требуется выполнить $Devide_Button = GUICtrlCreateButton("/", 80, 40, 25, 20) то что стоит в "" это и говорит что необходимо произвести деление или как????
Может как то некорректно вопрос поставил, извините.
Спасибо.
Kenwood3D
15-12-2007, 00:55
Creat0R,
Run ("rundll32 shell32,Control_RunDLL main.cpl @0")
$ConnPropTitle = 'Свойства: Мышь'
WinWait($ConnPropTitle)
_ControlTab($ConnPropTitle, "", "TabSelect", 2) »
У меня проблем с запуском Rundll32 нет, а на счет готовой цифры, я так уже и сделал. Просто дело в том, что я хотел применить этот способ еще и в другом месте, где количество закладок может изменяться от определенных факторов, а вот название остается тоже. Вот только даже команда "GetItemText" почемуто не хочет возвращать текст. Ну да ладно... Все равно спасибо.
Если можно, подсажите решение первой проблемы здесь (http://forum.oszone.net/post-697335.html#post697335)
И еще! :) Как проверить наличие или отсутсвие флага
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC