Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 1)

Модерирует : gyra, Maz

Widok (12-01-2009 14:47): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138

   

AddXL

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

AutoIt3

 
Домашняя страница: http://www.autoitscript.com
Страница загрузки: http://www.autoitscript.com/autoit3/downloads.php
 
Описание:

Цитата:
AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя - симуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши и управления окнами и его визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны.
Умеет он очень и очень многое! Бесплатный.

 
Помощь по AutoIT:
  • Справку на русском (и не только) вы всегда(?) сможете найти тут
  • Справочник по командам rundll32
  • Русский справочник по API-функциям
  • Помощь по Регулярным выражениям
  • AutoIt v3: Your Quick Guide (652 КБ) - Ваш быстрый гид в мир AutoIt-а (книга в формате pdf)
     
    Инструметы для AutoIt:
  • AutoIt3Wrapper [Страница закачки] - Программа для компилляции скрипта с дополнительными возможностями (добавление иконки, описании и т.п).
  • Koda (724 Kb) - Визуализация работы с GUI - аналог Visual Basic.
  • CodeWizard (400 Kb) - нечто простенькое на вариант Koda.
  • AutoItMacroGenerator (34 Kb) - Записывает в реальном времени действия пользователя в AutoIt код.
  • ScriptWriter (78 Kb) - Аналог AutoItMacroGenerator.
  • API Constants (1042 Kb) - Утилита для просмотра всех констант API-Функции и не только.
  • Страница закачки утилит которые идут в отдельной поставке редактора SciTE.
  • AutoIt меню для браузера Opera
     
    Готовые скрипты и программы с открытым кодом на AutoIt:
  • Коллекция AutoIt скриптов от Sanja Alone
  • Коллекция скриптов на http://msfn.org
  • Пополняющийся со временем сайт с полезными утилитами и функциями на AutoIt
  • Desktop Icons Restorator - Скрипт-Программа для сохранения/восстановления позиции иконок р.стола.
  • CaptureIt - Утилита предназначена для захвата изображений с вашего экрана.
  • SwitchIt - Скрипт для конвертирования выделенного текста
  • Скрипт расскраски кода AutoIt для публикации в форумах
     
    Общие вопросы и решения на Autoit:
  • Обработчик скриптов добавляющий отладчик (debugger)
  • Интеракция между несколькими скриптами
  • Пример использование интеракции между скриптами - Добавление элементов GUI с внешнего модуля
  • Копирование большого файла с отображением данных прогресса
  • Создание динамического меню в Tray Icon (значёк в области уведомления)
  • Пример создания своего мастера (Wizard)
  • Метод позволяющий запускать код VBS не создавая временных файлов
  • Описание функции GUIRegisterMsg()
  • Пример перехвата вводимых символов с клавиатуры
  • Пример деактивирования TabItem
  • Пример вывода лога в Edit-поле (с поддержкой форматирования текста)
  • Пример остановки/начало выполнения скрипта + Слежение за б.обмена с заменой неподдерживаемых в имени файла символов
  • Пример использования меню с иконками (ModernMenu.au3) -> Список программ в меню значка в системном трее
     
  • Как по PID процесса вычислить путь запускаемого файла
  • Получение IP по подключенному сокету
     
    Отдельные функции (UDF):
  • Функции Отключения/Подключения к Интернету
  • Функция проверки подключения к Интернету
  • Функция для получения структуры директории включая подкаталоги
  • Функция для поиска в файлах
  • Функция для смены разрешения экрана
  • Функция для смены раскладки клавиатуры в определённом окне
  • Функция для получения списка процессов с допол. инфой (путь к исполняемому файлу и др.)
  • Функции и пример для отображения детального процесса закачки файла
  • Функция (и пример использования) для отображения стильного диалога “О Программе” - [Усовершенствованная версия]
  • Функция возвращает пронумерованный список всех классов определённого окна + функция получения хендлов для этих классов
  • Функция для получения заголовка окна (или его идентификатора) по ID процесса (PID)
  • Функция _StringIsUTF8Format() + _StringToUTF() - Первая проверяет если строка содержится в UTF-8 формате, вторая преобразовывает строку в UTF-8 формат
  • Функция _FileOpenDialogEx - Возвращает массив (или строку) с полными путями к выбранным файлам
  • _AU3_Lib* Функции - Предназначены для обработки подключаемых библиотек через #include
  • Функция транслитерации строки
  • Расширенная библиотека для работы с реестром
     
    За шапкой следит ViSiToR  

  • Всего записей: 6 | Зарегистр. 24-11-2005 | Отправлено: 13:20 24-11-2005 | Исправлено: Maz, 11:50 17-04-2017
    theHelg

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день.
     
    Подскажите, как можно реализовать такую вещь:
     
    Мне нужно сделать PrintScreen определенной области экрана (x1,y1, x2,y2).  
    При этом мне нужно сделать именно принтСкрин, как виндовый, чтобы я видел то, что вижу на экране монитора.
     
    И второе - как мне определить цвет в некоторой точке скопированной области?
    на c#/delphi это довольно просто:

    Код:
     
                Using bmp As New Bitmap(1, 1)
                Using g As Graphics = Graphics.FromImage(bmp)
                    g.CopyFromScreen(Windows.Forms.Cursor.Position, _
                                              New Point(0, 0), New Size(1, 1))
                End Using
                Me.Text = bmp.GetPixel(0, 0).ToString
     


    Всего записей: 13 | Зарегистр. 12-11-2008 | Отправлено: 14:34 17-11-2008
    Maza_Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    theHelg
    1
    _ScreenCapture_Capture()
     
    2
    PixelGetColor()

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:21 17-11-2008
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gal7
    Если твои скрипты работают в виде ЕХЕ, то я выкладывал тут свой скриптик, который пишет инфу о следующей исполняемой строке в TraySetToolTip()
    Мне так стало намного легче отлавливать ошибки.

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 16:21 17-11-2008
    theHelg

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    1  
    _ScreenCapture_Capture()  
     
    2  
    PixelGetColor()

     
    C первым понятно. Он мне возвращает указатель на Bitmap вот такого типа:
    $aResult = DllCall("GDI32.dll", "hwnd", "CreateCompatibleBitmap", "hwnd", $hDC, "int", $iWidth, "int", $iHeight)
     
    Поскольку мне это надо делать в цикле, чтобы было весьма быстро - то без сохранения, а буду брать результат через указатель.
     
    Теперь другой вопрос - как мне по указателю вытащить цвет. PixelGetColor берет данные с экрана (и он меня не устраивает, так как берет цвет точки ПОД курсором мыши в графическом приложении)...
     

    Всего записей: 13 | Зарегистр. 12-11-2008 | Отправлено: 16:44 17-11-2008
    gal7

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Мне так стало намного легче отлавливать ошибки.

     
    Так Opt("TrayIconDebug", 1) делает тоже самое? У меня там в основном показывает sleep Мне нужно было немного другое.
     
    Мне нужно сделать изменения размера двух Edit, меняя их взаимный размер линией перетаскивания, но так, как я делал не получается:

    Код:
    #include <GUIConstants.au3>
    #Include <GuiRebar.au3>
    Opt("GUIOnEventMode", 1)
    $Form1 = GUICreate("Form1", 633, 454, 193, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $Edit1 = GUICtrlCreateEdit("", 16, 8, 561, 209)
    GUICtrlSetData(-1, "Edit1")
    $Edit2 = GUICtrlCreateEdit("", 16, 224, 561, 217)
    GUICtrlSetData(-1, "Edit2")
    GUISetState(@SW_SHOW)
    GUICtrlSetResizing(-1, 802);Не менять местоположение созданного элемента
    ;$hwndRebar = _GUICtrlRebar_Create($Form1)
    ;_GUICtrlRebar_AddBand($hwndRebar, $Edit1)
    ;_GUICtrlRebar_AddBand($hwndRebar, $Edit2)
     
    While 1
        Sleep(100)
    WEnd
     
    Func Form1Close()
    Exit
    EndFunc

     
    Некоторые строки там закомментированы для наглядности-сначала так, как должно быть, а с раскомментированными всегда эта линия ReBar вертикальная в то время как мне нужно горизонтальное деление. Все обсмотрел в справке, не увидел как это сделать, может это вообще как-то по-другому делается? Может кто-то делал такое?
     
    ############################
     
    Все, вопрос снят

    Всего записей: 145 | Зарегистр. 03-06-2007 | Отправлено: 19:49 17-11-2008 | Исправлено: gal7, 10:31 18-11-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gal7

    Цитата:
    У меня есть вопрос-можно ли как-нибудь БЫСТРО выходить из больших функций например при ошибках? Раньше, насколько я понял был goto, но потом его убрали.

    GoTo хороший и нужный оператор. Но его реализация слишком неопределенна. Как именно выходить из функции, куда девать стек? По идее стек должен сохраняться, если GoTo выполняется только в теле функции. А если переход осуществляется за ее пределы?
    Некоторым аналогом является ExitLoop [level], но к сожалению level должен быть точно указан, хотелось бы иметь ExitLoop [-1].
     
     
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 20:57 17-11-2008
    asdfzxcv



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо Maza_Faka ты мне своим примером (страницы 2е назад) показал как можно адаптировать vbs скрипты на язык автоита и я на второй свой вопрос как получить список компьютеров из домена отвечу сам, вот хочу привести пример скрипта то что у меня получилось я видел такой вопрос у кого-то тоже встречался:
     
    Opt("TrayIconHide", 1)
    $hFileWrite = FileOpen(@ScriptDir&"\computer_list.txt", 2)   ;открываем лог-файл в который будем сохранять выбранные строки     
    Dim $Container ;'as IADsContainer
    $ContainerName = inputbox( "Список компьютеров", "Введите имя ДОМЕНА:", "","",10,120 )
    $Container = ObjGet("WinNT://" & $ContainerName)
     
    $Container.Filter = _ArrayCreate("Computer")
    For $Obj In $Container
        $s=$Obj.Name
        ;WScript.Echo Obj.Name
        ;_ArrayDisplay($s)
        ;MsgBox(416, 'ok', $s)
        FileWriteLine($hFileWrite, $s)
    Next
    FileClose($hFileWrite)
    ShellExecute("computer_list.txt", "", @ScriptDir)
     
    Подскажите , мне непонята одна вещь вот когда я макросом показываю скрипты что нужно скрыть иконку из трея Opt("TrayIconHide", 1) то она при запуске скрипта почиму-то на какие-то доли секунд появляется всё таки и исчезает. Как от этого глюка можно избавится или с этим придётся смерится а то у меня на автоит бльшие планы возложены по резидентной работе в тылу противника

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 21:04 17-11-2008
    Inquisition

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я щас точно психану! Вот, скрипт функции: http://autoit.pastebin.com/m72def3ad
    Для тех кому лень, выложу его сдесь тоже.
     

    Код:
     
    $i = 0 ;Переменная, просто переменная.
     
    Func CombatCheck() ;Функция которая проверяет если бой закончился, если закончился то кликает нужное меню.
        Sleep(3000)
        $CombatCheck = PixelSearch(352, 365, 353, 366, 0x7AB800, 1)
        If IsArray($CombatCheck) Then
        MouseClick("left", 381, 426)
        Sleep(1000)
        MouseClick("left", 511, 455)
        Sleep(300)
        MouseClick("left", 511, 441)  
        Sleep(300)
        MouseClick("left", 511, 408)  
        Sleep(10000)
        Start()
        EndIf
    EndFunc
     
    Func Start() ;Просто для проверки работает ли CombatCheck()
        MsgBox( 0, "Cake", "Pie" )
    EndFunc
     
    While 1 ;Ищет пиксель и прибавляет еденицу к i, до тех пор пока он(пиксель) не найдется или пока переменная i не приравнятся 6.
    Do
        Sleep(1000)
        $i = $i + 1
        $Upper2 = PixelSearch(328, 377, 329, 378, 0x68181b, 12)
    Until IsArray($Upper2) or $i = 6
    If IsArray($Upper2) Then
            MouseClick("left", $Upper2[0], $Upper2[1] - 1)          
        EndIf
        If Not IsArray($Upper2) Then
    CombatCheck()
    EndIf
    Wend
     

     
    И эта функция полностью работает. Все просто супер замечательно!
     
    А вот, основной скрипт. В котором содержится  вышеуказаная функция: http://autoit.pastebin.com/m665206b5
    Для ленивых, выложил его сдесь.
     

    Код:
     
    WinActivate("Легенда: Наследие Драконов") ;Активирует окно.
    WinWaitActive("Легенда: Наследие Драконов") ;Ждет пока оно откроется.
     
    Opt("MouseCoordMode", 0) ;1=absolute, 0=relative, 2=client
    Opt("PixelCoordMode", 0) ;1=absolute, 0=relative, 2=client
     
    $i = 0 ;Переменная, просто переменная.
    Dim $Runner ;Тоже просто переменная...
     
    Dim $Array[5] = ["","414,223","471,233","528,220","470,204"] ;Позиции пикселей, для передвижение от одной карты к другой.
     
    HotKeySet("{ESC}", "Terminate") ;Выкл.                                                                                            
    HotKeySet("{F9}", "ShowMe") ;Вкл.
     
    While 1 ;Ждет пока запустится $Runner.
        Sleep(20)
        If $Runner Then Start()
        WEnd
        
    Func ShowMe() ;Для включения                                                                                        
        $Runner = Not $Runner
    EndFunc                              
    Func Terminate() ;Для Включения
        Exit 0
    EndFunc  
     
     
    Func CombatCheck() ;Функция которая проверяет если бой закончился, если закончился то кликает нужное меню.
        Sleep(3000)
        $CombatCheck = PixelSearch(352, 365, 353, 366, 0x7AB800, 1)
        If IsArray($CombatCheck) Then
        MouseClick("left", 381, 426)
        Sleep(1000)
        MouseClick("left", 511, 455)
        Sleep(300)
        MouseClick("left", 511, 441)  
        Sleep(300)
        MouseClick("left", 511, 408)  
        Sleep(10000)
        Start()
        EndIf
    EndFunc
        
     
    Func Start() ;Основная часть бота.                                                                                              
        $Coord = PixelSearch(129, 261, 858, 490, 0xfa6541) ;Ищет монстра и кликает на него.  
        If IsArray($Coord) Then
            MouseClick("left", $Coord[0], $Coord[1] - 1) ;Тыкает найденного монстра.                                    
        EndIf
        If Not IsArray($Coord) Then ;Если монстр не найден, передвигается на случайно выбранную карту.                  
        $Random = Random(1, 4, 1)
        $Split = StringSplit($Array[$Random], ",")
        MouseClick("left", $Split[1], $Split[2])
    Start() ;Перезапускает заново основной скрипт если монстр не найден.
    EndIf
     
     
    MouseClick("left", 289, 230) ;Начинает бой.                                          
    Sleep(1000)
    ;///////////////////////////////////////////////////////////////////////////////////////
                                 ;Скрипт боя
    ;///////////////////////////////////////////////////////////////////////////////////////
    Do ;Ищет появилась ли кнопка с атакой и кликает её, если в течении 6ти секунд не появилась кнопка, то запускает скрипт CombatCheck()
        Sleep(1000)
         $i = $i + 1
        $Bottom1 = PixelSearch(352, 456, 353, 457, 0x68181b, 3)
    Until IsArray($Bottom1) or $i = 6
    If IsArray($Bottom1) Then
            MouseClick("left", $Bottom1[0], $Bottom1[1] - 1)          
        EndIf
        If Not IsArray($Bottom1) Then
    CombatCheck()
    Endif
     
     
    Do
        Sleep(1000)
        $i = $i + 1
        $Upper1 = PixelSearch(328, 377, 329, 378, 0x68181b, 12)
    Until IsArray($Upper1) or $i = 6
    If IsArray($Upper1) Then
            MouseClick("left", $Upper1[0], $Upper1[1] - 1)          
        EndIf
        If not IsArray($Upper1) Then
    CombatCheck()
    EndIf
     
        
    Do
        Sleep(1000)
        $i = $i + 1
        $Upper11 = PixelSearch(328, 377, 329, 378, 0x68181b, 12)
    Until IsArray($Upper11) or $i = 6
    If IsArray($Upper11) Then
            MouseClick("left", $Upper11[0], $Upper11[1] - 1)          
        EndIf
        If Not IsArray($Upper11) Then
    CombatCheck()
    EndIf
     
        
    Do
        Sleep(1000)
        $i = $i + 1
        $Middle1 = PixelSearch(357, 429, 358, 430, 0x731111, 15)
    Until IsArray($Middle1) or $i = 6
    If IsArray($Middle1) Then
            MouseClick("left", $Middle1[0], $Middle1[1] - 1)          
        EndIf              
    If Not IsArray($Middle1) Then    
    CombatCheck()
    EndIf
     
     
    Do
        Sleep(1000)
        $i = $i + 1
        $Bottom2 = PixelSearch(352, 456, 353, 457, 0x68181b, 3)
    Until IsArray($Bottom2) or $i = 6
    If IsArray($Bottom2) Then
            MouseClick("left", $Bottom2[0], $Bottom2[1] - 1)          
        EndIf      
    If Not IsArray($Bottom2) Then    
    CombatCheck()
    EndIf
     
        
    Do
        Sleep(1000)
        $i = $i + 1
        $Upper2 = PixelSearch(328, 377, 329, 378, 0x68181b, 12)
    Until IsArray($Upper2) or $i = 6
    If IsArray($Upper2) Then
            MouseClick("left", $Upper2[0], $Upper2[1] - 1)          
        EndIf
        If Not IsArray($Upper2) Then
    CombatCheck()
    EndIf
     
        
    Do
        Sleep(1000)
        $i = $i + 1
        $Upper22 = PixelSearch(328, 377, 329, 378, 0x68181b, 12)
    Until IsArray($Upper22) or $i = 6
    If IsArray($Upper22) Then
            MouseClick("left", $Upper22[0], $Upper22[1] - 1)          
        EndIf
        If Not IsArray($Upper22) Then
    CombatCheck()
    EndIf
     
        
    Do
        Sleep(1000)
        $i = $i + 1
         $Middle2 = PixelSearch(357, 429, 358, 430, 0x731111, 15)
    Until IsArray($Middle2) or $i = 6
    If IsArray($Middle2) Then
            MouseClick("left", $Middle2[0], $Middle2[1] - 15)        
        EndIf
        If Not IsArray($Middle2) Then
    CombatCheck()
    EndIf
        
        
    EndFunc ;Начинает все заново
     

     
    Здесь эта чертова функция вообще не запускается! Там где стоит CombatCheck(), как будто бы стоит пробел. Скрипт идет дальше до следующий строки и не делает ничего написанного в CombatCheck(). Но! Если вставить в CombatCheck() MsgBox() То он запустит MsgBox(), но пиксель искать так и не будет. Это полнейший бред так как в первом скрипте все работает. И по логике все тоже должно работать. Help!
     
     
     
     
    #Edit:
     
    Я заметил что функция работает тогда и только тогда когда CombatCheck() запускается в первый раз. Условно говоря после $Bottom1 запускается а вот после $Upper1 не запускается.

    Всего записей: 10 | Зарегистр. 14-11-2008 | Отправлено: 22:30 17-11-2008 | Исправлено: Inquisition, 23:47 17-11-2008
    CrazyNNM



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Inquisition
    попробуй #NoTrayIcon, поможет;)

    Всего записей: 39 | Зарегистр. 27-10-2008 | Отправлено: 00:40 18-11-2008
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Так Opt("TrayIconDebug", 1) делает тоже самое?

    Не совсем. Для скомпиленых скриптов она бесполезна.

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 01:55 18-11-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Inquisition 22:30 17-11-2008
    Цитата:
    Я щас точно психану!

    И что дальше?
     

    Цитата:
    Для тех кому лень

    А при чём тут лень?
     

    Цитата:
     функция работает тогда и только тогда когда CombatCheck() запускается в первый раз

    Я уже написал, что тут играет роль множество факторов, и при чём непредсказуемых факторов. И то что функция запускает сама себя, уже фактор “зацикленности”, т.е происходит первый вход в функцию, а далее постоянный её вызов (ей самой же), таким образом выхода из функции никогда не происходит (или происходит но через долгое время). Другими словами, это не практично.
     
    17:24 15-11-2008
    Цитата:
     возможно вы сможете скачать ту самую игру для которой я этот бот делаю? В целях проверки скрипты разумеется! Клиент весит всего 2.5 мегабайта

    Скачать не проблема, но скажу по правде, у меня нет времени тестировать скрипт на игре, тем более что я не сильный любитель подобных скриптов, да и в игры давно не играл

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 03:07 18-11-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Inquisition
    Из статьи в Википедии:

    Цитата:
    Нередко AutoIt используется для создания ботов к онлайн-играм. Боты позволяют автоматизировать некоторые действия в играх, в результате пользователь может быстрее добиться нужного результата. Такое использование Autoit не одобряется сообществом, поскольку создаёт плохую репутацию программе, однако несколько подобных скриптов могут быть найдены на официальном форуме. Использование ботов рассматривается большинством пользователей AutoIt как нечестная игра, и вам не следует ожидать значительной помощи от сообщества в их создании. Многие члены сообщества вообще не рассматривают такие запросы.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 06:01 18-11-2008
    Inquisition

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Другими словами, это не практично.

     
    А как практично? По другому не умею =(
     
    Inquisition
    Из статьи в Википедии:

    Цитата:
    Нередко AutoIt используется для создания ботов к онлайн-играм. Боты позволяют автоматизировать некоторые действия в играх, в результате пользователь может быстрее добиться нужного результата. Такое использование Autoit не одобряется сообществом, поскольку создаёт плохую репутацию программе, однако несколько подобных скриптов могут быть найдены на официальном форуме. Использование ботов рассматривается большинством пользователей AutoIt как нечестная игра, и вам не следует ожидать значительной помощи от сообщества в их создании. Многие члены сообщества вообще не рассматривают такие запросы.

     
    Если вы посмотрите сообщение developer'ов на сайте autoit вы поймете, что autoit создавался ИМЕННО для ботов. Также как AcTools.
     
    З.Ы. Статус MVP на форуме получает в том числе и те люди которые создавали мощные боты А по скольку MVP самый (За исключением Developer'a и Admin'a) престижный статус, то можно понять к чему я клоню. (MVP = Monster Vs Person)

    Всего записей: 10 | Зарегистр. 14-11-2008 | Отправлено: 09:36 18-11-2008 | Исправлено: Inquisition, 09:44 18-11-2008
    asdfzxcv



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Полностью согласен ! нехрена ботов писать это низко! Игры с ботами, это действительно как безалкоголоное пиво с резиновой женщиной.
     
    Блин, спасибо CrazyNNM за иконку действительно гробовая тишина в трее )

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 09:48 18-11-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Inquisition 09:36 18-11-2008
    Цитата:
    autoit создавался ИМЕННО для ботов

    Нет, он создавался для автоматизации задач в Windows. В справке об этом написано.
     

    Цитата:
    Статус MVP на форуме получает в том числе и те люди которые создавали мощные боты

    Нет с этим связи. Этот статус получают участники форума которые вносят полезный вклад в AutoIt, помагают другим участникам, и принимают активное участие в развитии проекта.
     

    Цитата:
    MVP = Monster Vs Person

    Ага, щас. Говорят игромания это тяжёлая болезнь - MVP это Most Valuable Programmer/Person
    Кстати, на том же оф. форуме Админы (точнее Jon) заблокировали целый подфорум на тему игр (и правильно сделали), если с Английским нет проблем, то вот интересный топик на эту тему.


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 10:13 18-11-2008
    theHelg

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    _ScreenCapture_Capture мне возвращает указатель на картинку.
    Как мне теперь можно работать с этой картинкой?
    Какие вообще методы работают с графикой? Что я знаю, так это, что эту картинку можно вывести на GUI форму... А как можно еще работать с графикой в AutoITе?
     

    Всего записей: 13 | Зарегистр. 12-11-2008 | Отправлено: 13:18 18-11-2008 | Исправлено: theHelg, 13:32 18-11-2008
    Loopback



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    _ScreenCapture_Capture мне возвращает указатель на картинку.  
    Как мне теперь можно работать с этой картинкой?  
    Какие вообще методы работают с графикой? Что я знаю, так это, что эту картинку можно вывести на GUI форму... А как можно еще работать с графикой в AutoITе?

    В принципе, вся сложная работа с графикой производится через UDF GDIPlus.au3 - там куча разных функций.  
    Правда ничего для получения цвета точки нет, но я нашел такую функцию - GdipBitmapGetPixel, которая делает то что надо.
     

    Код:
    #include <ScreenCapture.au3>
     
    $x = 10
    $y = 40
     
    $hBitmap = _ScreenCapture_Capture()
     
    _GDIPlus_Startup()
    ; преобразуем HBITMAP в объект, понятный функциям GDI+
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    ; получим цвет пикселя
    $aResult = DllCall($ghGDIPDll, "int", "GdipBitmapGetPixel", "ptr", $hImage, "int", $x, "int", $y, "int*", 0)
    _GDIPlus_Shutdown()
    ; удалим объект
    _WinAPI_DeleteObject($hBitmap)
     
    MsgBox (0, "Цвет точки " & $x & ":" & $y, Hex($aResult[4], 6))

     
    Вообще, если чего-то нет в UDF, всегда можно глянуть в MSDN, а тут - менее документированные функции.

    Всего записей: 174 | Зарегистр. 08-03-2002 | Отправлено: 14:52 18-11-2008 | Исправлено: Loopback, 15:08 18-11-2008
    theHelg

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Код:#include <ScreenCapture.au3>  
     
    $x = 10  
    $y = 40  
     
    $hBitmap = _ScreenCapture_Capture()  
     
    _GDIPlus_Startup()  
    ; преобразуем HBITMAP в объект, понятный функциям GDI+  
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)  
    ; получим цвет пикселя  
    $aResult = DllCall($ghGDIPDll, "int", "GdipBitmapGetPixel", "ptr", $hImage, "int", $x, "int", $y, "int*", 0)  
    _GDIPlus_Shutdown()  
    ; удалим объект  
    _WinAPI_DeleteObject($hBitmap)  
     
    MsgBox (0, "Цвет точки " & $x & ":" & $y, Hex($aResult[4], 6))  

     
    Спасибо!  
    Дейтсвительно работает!!!
    Буду разбираться с документацией!

    Всего записей: 13 | Зарегистр. 12-11-2008 | Отправлено: 15:26 18-11-2008
    asdfzxcv



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите , пишу код определие сида пользователя который в данный момент залогинен на компе. Парсом ищу строку с классами что бы определить загруженный профиль. Я не могу понять что мне нужно сделать когда найденный шаблон отображается в массиве но я его не могу отобразить его в MsgBox(4096, "Value Name  #", $var2), если я делаю $var2[0] то вообще ошибку выдаёт.... не пойму.
     
    #include <Array.au3>
    $comp='имя компьютера'
    while 1
        For $i= 1 to 15
        $var = RegEnumKey("\\"&$comp&"\HKEY_USERS", $i)
        If @error <> 0 then ContinueLoop
    $var2 = StringRegExp($var,'S-\d-\d-\d*-\d*-\d*-\d*-\d*_Classes', 1)  
    ;$var2 = StringRegExp("S-1-5-21-842925646-796845957-3458001333-13513_Classes",'S-\d-\d-\d*-\d*-\d*-\d*-\d*_Classes', 1)  
        ;if @error <> 1 then ContinueLoop
    _ArrayDisplay($var2)
     
    Next
    MsgBox(4096, "sid", $var2)
    exit
    WEnd

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 17:26 18-11-2008 | Исправлено: asdfzxcv, 08:23 19-11-2008
    gal7

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    К моменту выхода из цикла там видимо ничего не находит регулярное выражение в $var2, поэтому ошибка если указать как $var2[0].    _ArrayDisplay($var2) показывает массив только если передан массив, а если переменная, то не показывает. А с раскомментированным в примере у меня все работает... (если заменить ContinueLoop на ExitLoop).

    Всего записей: 145 | Зарегистр. 03-06-2007 | Отправлено: 18:24 18-11-2008 | Исправлено: gal7, 19:01 18-11-2008
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 1)
    Widok (12-01-2009 14:47): лимит страниц. продолжаем здесь


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru

    Рейтинг.ru