sproxy
Full Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору MIHMIH007 14:00 17-03-2009 Цитата: Подскажите пожалуйста я новичок в AutoIT с чего мне лучше начать?... | Если есть общее представление/знакомство с самыми азами программирования, думаю будет понятно - мини пример: Код: #region: - Option ;~ Опция AutoIt, устанавливает(если 1) необходимость объявлять все переменные перед использованием. ;~ Имхо, так меньше проблем и мусора: Opt('MustDeclareVars', 1) ;~ Опция AutoIt, скрывает(если 1) иконку скрипта в tray области: Opt('TrayIconHide', 0) ;~ Опция AutoIt, устанавливает(если 1) настройку при которой иконка скрипта в tray области ;~ показывает текущую выполняемую строчку кода: Opt('TrayIconDebug', 1) #endregion #region: - Global ;~ Объявление глобальных переменных, с этими переменными можно сразу работать в любых ;~ функциях - т.к. они глобальные, значит в функциях эти переменные будут иметь ;~ те же значения, котрые были им присвоены до использования в функции: Global $iCalcPid, $iCalcHwd, $aCalcPos Global $sButtonClass = '[CLASS:Button; INSTANCE:5]' Global $sText #endregion ;~ Запуск калькулятора, $iCalcPid будет содержать PID(индетификатор этого процесса) ;~ запущенного процесса: $iCalcPid = Run('calc.exe') ;~ Ожидание запуска Калькулятора, именно того, который был заущен коммандой выше: While 1 ;~ Присвоение переменной $iCalcHwd handle(индивидуального указателя этого окна) ;~ запущенного калькулятора - функция _ProcessGetWindow возвращает Handle окна ;~ по PID процесса: $iCalcHwd = _ProcessGetWindow($iCalcPid, 1) ;~ Если переменная содержит значение типа указателя на окно, Handle, то выйти ;~ из бесконечного цикла: If IsHWnd($iCalcHwd) Then ExitLoop WEnd ;~ Необходимо выяснить в каком режиме работает Калькулятор: Обычный или Инжинерный. ;~ Для этого банально сравниваем значение ширины окна калькулятора и если значение ;~ больше ширины Калькулятора в обычном режиме, значит Калькулятор в инжинерном ;~ режиме.Так как далее необходимо нажать на кнопку цифры 7 - необходимо ;~ знать Advanced Class кнопки, в разных режимах у кнопки цифры 7 он разный. ;~ Для обычного режима Advanced Class [CLASS:Button; INSTANCE:5], ;~ а для обычного [CLASS:Button; INSTANCE:42]. ;~ Соответсвенно выяснив в каком режиме работает Калькулятор, ;~ то нужный Advanced Class кнопки цыфры 7 присваивается переменной $sButtonClass, ;~ которая будет использоваться дальше. ;~ Получение размера окна Калькулятора: $aCalcPos = WinGetPos($iCalcHwd) ;~ Проверка режима калькулятора: If $aCalcPos[2] > 260 Then $sButtonClass = '[CLASS:Button; INSTANCE:42]' ;~ Клик на кнопку цифры 7. ;~ $iCalcHwd - это указатель на окно Калькулятора который был запущен выше коммандой Run. ;~ $sButtonClass - Advanced Class(своего рода указатель именно на нужную кнопку в окне) кнопки ;~ цыфры 7 ControlClick($iCalcHwd, '', $sButtonClass) ;~ остановить выполнение скрипта на 5 мили секунд, на всякий случай, вдруг доолга будет нажиматься ;~ цифра 7 )) Sleep(5) ;~ Получение введеных цифр, поле введенных цифр имеет Advanced Class [CLASS:Edit; INSTANCE:1]: $sText = ControlGetText($iCalcHwd, '', '[CLASS:Edit; INSTANCE:1]') ;~ Удаление последних 2 символов из результата считывания введенных цифр, так Калькулятор ;~ отображает введеные цифры, за тем запятую, затем один пробел. Вот запятая и пробел ;~ будут удаленны: $sText = StringTrimRight($sText, 2) ;~ Вывод сообщения с результатами получения введеных цыфр: MsgBox(64, 'Результат', 'Введенные цифры: ' & $sText) ;~ Вызов функции выхода из скрипта. Если же её нет, то скрипт и так ;~ закроется сам далее, так как больше нет програмного кода к выполнению. ;~ Но это функция нужна, так как она закрывает ранее открытый Калькулятор, ;~ именно тот который был открыт, другие не тронет. И уже потом ;~ закрывает скрипт: _Pro_Exit() ;~ Функция выхода из скрипта: Func _Pro_Exit() ProcessClose($iCalcPid) Exit EndFunc ;~ Функция получения Handle окна по PID его процесса: Func _ProcessGetWindow($iPID, $iRet=-1) Local $aWinList = WinList() Local $aRet[2] If IsString($iPID) Then $iPID = ProcessExists($iPID) For $i = 1 To UBound($aWinList)-1 If WinGetProcess($aWinList[$i][1]) = $iPID Then $aRet[0] = $aWinList[$i][0] ;Title $aRet[1] = $aWinList[$i][1] ;WinHandle If $iRet = 0 Then Return $aRet[0] If $iRet = 1 Then Return $aRet[1] Return $aRet EndIf Next Return SetError(1, 0, $aRet) EndFunc | Advanced Class и т.д. данные об элементе окна можно узнать с помощью утилиты: AutoIt v3 Windows Info. находится в папке установки AutoIt\Au3Info.exe В целом, начинайте писать то, что вам необходимо. Что не знаете - спрашивай тут, многие помогут. Так, со временем, можно изучить этот язык. Тут все просто, только необходимо немного разобраться) И конечно же, скачайте: 1 Последную версию AutoIt 2 Русскую справку(примерно по 10% комманд русская справка немного устарела, но не беда, для начала будет понятней по русской, + можно сравнимать с английской) 3 Редактор SciTe +, ViSiToR сказал все очень верно! | Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 19:44 17-03-2009 | Исправлено: sproxy, 22:21 17-03-2009 |
|