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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Maza Faka



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

    Цитата:
    Посмотрите у себя мой скрипт, может быть это только у меня он ТАК зверски тормазит!!!???

    У меня отработал нормально, за несколько секунд. Максимальная нагрузка на процессор не превышала 18%. Несколько советов по оптимизации: старайся не использовать функции из Array.au3 UDF, так, как они замедляют работу скрипта, так же, как и AutoItSetOption("ExpandEnvStrings", 1)

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:51 22-07-2008
    asdfzxcv



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka - просто ахрененно круто работает галочка в трее!!! ))  
    даже слов нет
     
    Программа готова!
     
    ps а скажи зачем побитовое сложение делается BitAND(TrayItemGetState($auto), $TRAY_CHECKED) ?
    а обычно тут не прокатило был ?

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 09:47 22-07-2008 | Исправлено: asdfzxcv, 10:41 22-07-2008
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka:
    1)
    Цитата:
    старайся не использовать функции из Array.au3 UDF

    я  люблю использовать _ArrayAdd, вот эта функция из Array.au3:
     

    Цитата:
    Func _ArrayAdd(ByRef $avArray, $vValue)
        If Not IsArray($avArray) Then Return SetError(1, 0, -1)
     
        Local $iUBound = UBound($avArray)
        ReDim $avArray[$iUBound + 1]
        $avArray[$iUBound] = $vValue
        Return $iUBound
    EndFunc   ;==>_ArrayAdd

     
    и если я провишу эту функцию у себя в скрипте и буду использовать уже
    как бы "мою" функцию _ArrayAdd - то это ускорит обработку?
    => я правильно понял? или как по другому добовлять элементы в массив?
     
    2)
    Цитата:
    У меня отработал нормально, за несколько секунд.

    Maza Faka, у тебя в системе многа lan, wan ?
     
    у меня 6 сетевых и 3 dialup, как понимаю обробатывая их - так и тормазит,
    просто жесть - запуска скрипт и _жду_ пока выдаст список....просто фигею от этого...
    Хотя, запускал на виртуальной xp, там мнгновенно выдает список, но там всего
    одна сетевуха и все....больше проверить не где...
     
     
    Добавлено:
    а как передать одному скрипту autoit инфо из другого autoit?
     
    сейчас делаю gui к сприпту, который будет постоянно работать
    в системе, как обработать если этот скрипт будет запущен
    второй раз?
     
    подумал, что сделать обработку - проверять при зауске
    не запещн ли уже и если да - то передать в уже запущеный
    экземпляр - что он открл gui окно, а второй конечно закрылся.
     
    так вот как же подружить два экземпляра одного и того же
    скрипта? можно опрашивать переменную среду...- но может есть и
    другие варианты?

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 09:53 22-07-2008
    ziherun

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста как можно реализовать такое. Запускается например 2 окна игры, но по названию окна они получаются одинаковые как можно привязать скрипт к какому-то определенному окну? Да и вообще сделать типа интерфейса чтобы на нем было видно какие окна запущены и привязать скрипт к соответсвующему окну. Заранее спасибо. Maza Faka спасибо за предыдущий скрипт очень помог

    Всего записей: 6 | Зарегистр. 18-07-2008 | Отправлено: 12:50 22-07-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 09:53 22-07-2008
    Цитата:
    как передать одному скрипту autoit инфо из другого autoit?

    Уже приводил этот(?) пример вроде... нужно бы в шапку его:
     

    Код:
    #NoTrayIcon
    #include
    <GuiConstants.au3>
    ;
     
    RegisterScriptMsg("SendMessage Test", $CmdLineRaw)
     
    $Gui = GUICreate("SendMessage Test")
    GUISetState()
     
    While 1
        $Msg = GUIGetMsg()
        Switch $Msg
            Case -3
                Exit
        EndSwitch
    WEnd
     
    Func
    Main_Msg_Function($vsMsg)
        MsgBox(0, "", "Recieved message:" & @LF & @LF & $vsMsg)
        ;Exit
    EndFunc
     
    ;=====================================
    Func RegisterScriptMsg($sTitle, $vMsg)
        Local $OccurName = StringReplace(@ScriptFullPath, "\", "")
        Local $ERROR_ALREADY_EXISTS = 183
     
        Local $ihWnd = WinGetHandle($sTitle)
     
        Local $hDll = DllCall("kernel32.dll", "int", "CreateMutex", "int", 0, "long", 1, "str", $OccurName)
        Local $iLastError = DllCall("kernel32.dll", "int", "GetLastError")
        If $iLastError[0] = $ERROR_ALREADY_EXISTS Then
            _AU3COM_SendData($vMsg, $ihWnd)
            Exit
        Else
            Local Const
    $WM_COPYDATA = 0x4A
            GUIRegisterMsg($WM_COPYDATA, "_GUIRegisterMsgProc")
        EndIf
    EndFunc
     
    Func
    _GUIRegisterMsgProc($hWnd, $MsgID, $WParam, $LParam)
        Local Const $WM_COPYDATA = 0x4A
     
        If $MsgID = $WM_COPYDATA Then
            Local
    $vsMsg = _AU3COM_RecvData($LParam)
            Local $MSGRECVD = DllStructGetData($vsMsg, 1)
            ;Here is go whatever we need to do with the recieved string ($MSGRECVD)
            Call("Main_Msg_Function", $MSGRECVD)
        EndIf
    EndFunc
     
    Func
    _AU3COM_SendData($InfoToSend, $RecvWinHandle)
        Local Const $WM_COPYDATA = 0x4A
        Local $StructDef_COPYDATA = "dword var1;dword var2;ptr var3"
        Local $CDString = DllStructCreate("char var1[256];char var2[256]") ;the array to hold the string we are sending
     
        DllStructSetData($CDString, 1, $InfoToSend)
        Local $pCDString = DllStructGetPtr($CDString) ;the pointer to the string
        Local $vs_cds = DllStructCreate($StructDef_COPYDATA);create the message struct
        DllStructSetData($vs_cds, "var1", 0) ;0 here indicates to the receiving program that we are sending a string
        DllStructSetData($vs_cds, "var2", String(StringLen($InfoToSend) + 1));tell the receiver the length of the string
        DllStructSetData($vs_cds, "var3", $pCDString) ;the pointer to the string
        Local $pStruct = DllStructGetPtr($vs_cds)
        DllCall("user32.dll", "long", "SendMessage", "hwnd", $RecvWinHandle, "int", $WM_COPYDATA, "int", 0, "int", $pStruct)
     
        $vs_cds = 0 ;free the struct
        $CDString = 0 ;free the struct
     
        Return 1
    EndFunc
     
    Func
    _AU3COM_RecvData($COM_LParam)
        ; $COM_LParam = Poiter to a COPYDATA Struct
        Local $STRUCTDEF_AU3MESSAGE = "char var1[256];int"
        Local $StructDef_COPYDATA = "dword var1;dword var2;ptr var3"
        Local $vs_cds = DllStructCreate($StructDef_COPYDATA, $COM_LParam)
        ; Member No. 3 of COPYDATA Struct (PVOID lpData;) = Pointer to Costum Struct
        Local $vs_msg = DllStructCreate($STRUCTDEF_AU3MESSAGE, DllStructGetData($vs_cds, 3))
        Return $vs_msg
    EndFunc

     
    Вот скрипт для проверки:
     

    Код:
    Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @ScriptDir & '\Register Script Msg.au3" /Param')

     
    Как видно, интеракция происходит посредствам командной строки.
     
    Добавлено:
    Ещё вариант, более продвинуты (в стиле UDF):
     
     
    UDF - «AU3_INTERACT.au3»:

    Код:
    #include-once
     
    If Not IsDeclared("WM_USER") Then Assign("WM_USER", 0x0400, 1)
     
    Global $vINTERACT_Msg           = -1
    Global $aMAIN_FUNCTIONS         = -1
    Global $h_MAIN_INTERACT_GUI     = 0
    Global $ah_INTERACT_TIMER[2]    = [-1, -1]
     
    Func OnAutoItExit()
        If $ah_INTERACT_TIMER[0] <> -1 Then _TimerStop($ah_INTERACT_TIMER[0], $ah_INTERACT_TIMER[1])
    EndFunc
     
    Func
    _Interaction_Handler($hWnd, $MsgID, $WParam, $LParam)
        If $vINTERACT_Msg = -1 Then Return
     
        For
    $i = 0 To UBound($aMAIN_FUNCTIONS)-1
            If $aMAIN_FUNCTIONS[$i][0] = $vINTERACT_Msg Then
                $vINTERACT_Msg = -1
     
                Call($aMAIN_FUNCTIONS[$i][1], $aMAIN_FUNCTIONS[$i][2])
                If @error Then Call($aMAIN_FUNCTIONS[$i][1])
     
                ExitLoop
            EndIf
        Next

     
        $vINTERACT_Msg = -1
    EndFunc
     
    Func
    _AutoItSetInteraction($hWnd=0, $MsgID=0, $WParam=0, $LParam=0)
        If Not IsHWnd($hWnd) Then
            If Not
    IsArray($MsgID) Then
                GUIRegisterMsg($WM_USER, "")
                If IsHWnd($h_MAIN_INTERACT_GUI) Then GUIDelete($h_MAIN_INTERACT_GUI)
     
                _TimerStop($ah_INTERACT_TIMER[0], $ah_INTERACT_TIMER[1])
     
                Return
            EndIf

     
            $ah_INTERACT_TIMER = _TimerStart("_Interaction_Handler", 10)
            $aMAIN_FUNCTIONS = $MsgID
     
            $h_MAIN_INTERACT_GUI
    = GUICreate($hWnd)
            GUIRegisterMsg($WM_USER, "_AutoItSetInteraction")
     
            Return
        EndIf

     
        $vINTERACT_Msg = BitAND($LParam, 0xFFFF)
    EndFunc
     
    Func
    _TimerStart($sFunction, $iTime=250)
        Local $hCallBack = DllCallbackRegister($sFunction, "none", "hwnd;int;int;dword")
     
        Local $aDll = DllCall("user32.dll", "int", "SetTimer", _
            "hwnd", 0, _
            "int", TimerInit(), _
            "int", $iTime, _
            "ptr", DllCallbackGetPtr($hCallBack))
     
        Local $aRet[2] = [$hCallBack, $aDll[0]]
        Return $aRet
    EndFunc
     
    Func
    _TimerStop($hCallBack, $hTimer)
        DllCallBackFree($hCallBack)
        Local $aRet = DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "int", $hTimer)
        Return $aRet[0]
    EndFunc

     
     
    Получатель - «Reciever.au3»:

    Код:
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <AU3_INTERACT.au3>
    ;
     
    #Region _AutoItSetInteraction() Part
    Dim $aFunctions[3][3]
     
    $aFunctions[0][0] = 1001
    $aFunctions[0][1] = "My_Function_1"
    $aFunctions[0][2] = "Some Param1"
     
    $aFunctions[1][0] = 1002
    $aFunctions[1][1] = "My_Function_2"
    $aFunctions[1][2] = "This is parameter for My_Function_2"
     
    $aFunctions[2][0] = 1003
    $aFunctions[2][1] = "My_Function_3"
    $aFunctions[2][2] = "Well, you get the picture "
     
    _AutoItSetInteraction("_MYAPP_", $aFunctions)
    #EndRegion _AutoItSetInteraction() Part
    ;
     
    $hGUI = GUICreate("_AutoItSetInteraction Demo", 400, 200, -1, -1, -1, $WS_EX_TOPMOST)
     
    $Edit = GUICtrlCreateEdit("", 10, 10, 380, 180)
     
    GUISetState()
     
    While 1
        $nMsg = GUIGetMsg()
     
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
     
    Func
    My_Function_1($vParam)
        GUICtrlSetData($Edit, "Function 1 Fired, with param:    " & $vParam & @CRLF, 1)
        MsgBox(262144+64, "", "Function 1 Fired!")
    EndFunc
     
    Func
    My_Function_2($vParam)
        GUICtrlSetData($Edit, "Function 2 Fired, with param:    " & $vParam & @CRLF, 1)
        MsgBox(262144+64, "", "Function 2 Fired!")
    EndFunc
     
    Func
    My_Function_3($vParam)
        GUICtrlSetData($Edit, "Function 3 Fired, with param:    " & $vParam & @CRLF, 1)
        MsgBox(262144+64, "", "Function 3 Fired!")
    EndFunc

     
     
     
    Отправитель - «Sender.au3»:

    Код:
    #include <SendMessage.au3>
     
    Global Const $WM_AU3_USR = 0x0400 ;$WM_USER
     
    $hWnd = WinGetHandle("[CLASS:AutoIt v3 GUI;TITLE:_MYAPP_]")
     
    _SendMessage($hWnd, $WM_AU3_USR, 0, 1001)
    Sleep(1500)
    _SendMessage($hWnd, $WM_AU3_USR, 0, 1002)
    Sleep(1500)
    _SendMessage($hWnd, $WM_AU3_USR, 0, 1003)


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:18 22-07-2008 | Исправлено: ViSiToR, 17:04 23-07-2008
    IgRo



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как перевести на AutoIT с VBA "functionName(Nothing)"  
    AutoIT не понимает Nothing

    Всего записей: 20 | Зарегистр. 24-07-2003 | Отправлено: 22:19 22-07-2008
    Hackproof



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Смотря, что имеется ввиду.
    Если просто вызов функции без аргументов, то FuncName(). Если в нее передается аргумент, то его можно загнать в переменную, например $arg, и вызвать FuncName($arg).
     

    Код:
    $textlog="Запуск программы."
    writelog($textlog)
     
    func writelog($textlog)
    $log=FileOpen ( "c:\scripts\new\log.log", 1)
            $timecur= _NowDate() & " " & _NowTime()
            $logstring=$timecur & " - " & $textlog
            FileWriteLine ($log, $logstring)
    FileClose ($log)
    endfunc

     
    Народ, ставлю пиво тому, кто поможет с пайпами. Очень нужно. На официальном форуме глухо...

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 23:25 22-07-2008 | Исправлено: Hackproof, 00:04 23-07-2008
    IgRo



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    If Not SelComp Is Nothing Then ...
    Опять Nothing не понимает

    Всего записей: 20 | Зарегистр. 24-07-2003 | Отправлено: 00:32 23-07-2008
    Hackproof



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно пару строк кода перед условием? А то мне тоже непонятно, что такое SelComp...
    Тем более в AutoIt вроде нет оператора Is.

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 03:16 23-07-2008 | Исправлено: Hackproof, 03:22 23-07-2008
    SysLam



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hackproof
    имхо не туда копаешь, пайпы прекрасно работают через сеть,  смотри настройки приложения (ODBCAD32 в помощь) или SQL (может быть запрет на удаленный доступ из сети)

    Всего записей: 52 | Зарегистр. 05-10-2005 | Отправлено: 04:26 23-07-2008
    Hackproof



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В SQL рабочих протоколов только два - pipes и tcp. Сетевых подключений к sql нет, значит остается только pipe. Разработчики второго софта однозначно утверждают, что sql должен стоять на той же машине - плюс в сторону pipe. А вот реализовывать работу по сети они не хотят, и убедить их не получается. Имя канала жестко вписано в код программы, и изменить его можно только дизассемблировав модуль, отвечающий за связь, но искать нужное место очень долго, и не факт, что после этого софт заработает.

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 05:47 23-07-2008 | Исправлено: Hackproof, 05:59 23-07-2008
    Maza Faka



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

    Цитата:
    а скажи зачем побитовое сложение делается BitAND(TrayItemGetState($auto), $TRAY_CHECKED) ?

    А затем, что Item может иметь несколько состояний, например: $TRAY_CHECKED; $TRAY_ENABLE; $TRAY_FOCUS; $TRAY_DEFAULT, соответственно, если мы проверим так:  

    Код:

    If TrayItemGetState($auto) = $TRAY_CHECKED Then...

    то можем получить ложный результат, хотя Item будет отмечен галочкой.
     
    Добавлено:
    ViSiToR

    Цитата:
    Как видно, интеракция происходит посредствам командной строки.

    Очень интересные скрипты! Спасибо
     
    P.S.
    Нашёл описание API-функции CreateMutex с примерами:
    Что такое взаимоисключение (Mutex)
    Функции CreateMutex() и ReleaseMutex()
    Синхронизация файловых операций Mutex

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:11 23-07-2008
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ViSiToR, спасибо, за разъяснение.
    Еще вопрос, как считать параметры переданные моему скрипту через коммандную строку, т.е. запускаю ярлык exe файла с добавлением /param=1 - это реально?

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 10:23 23-07-2008
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy
    Help
     
    ViSiToR
    Воодушевлённый твоими примерами накарябал примеры синхронизации скриптов.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 10:52 23-07-2008
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ООООгромное спасибо )) :
    Maza Faka и ViSiToR
    вы тут как Гуру - оба ...
    вопрос такой, AutoIT гууд, но как понимаю,
    писать на более серьезных языках - лучше и выгоднее?
    С чего начать изучение C? VB...... .NET
    Или же, к примеру програмка будильник, реализовать  
    на AutoIT лучше чем на Си....?
     

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 11:01 23-07-2008 | Исправлено: sproxy, 11:03 23-07-2008
    ziherun

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

    Всего записей: 6 | Зарегистр. 18-07-2008 | Отправлено: 11:09 23-07-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    IgRo 00:32 23-07-2008
    Цитата:
    If Not SelComp Is Nothing Then ...  
     Опять Nothing не понимает

    If $SelComp == "" Then ...
    Это с учётом того, что SelComp являтся переменной, но суть думаю ясна.
     
    sproxy 10:23 23-07-2008
    Цитата:
    как считать параметры переданные моему скрипту через коммандную строку

    Если имеется в виду считать значение параметра, то для этого тоже есть у меня UDF
     

    Код:
    ;Example on how to get unknown Command Line...
     
    ;If $CmdLine[0] = 0 Then Exit ;Exit the script, because the command line was empty

     
    If $CmdLine[0] = 0 Then $CmdLineRaw = '/Param=1 -File "C:\Program Files\Some App\File.txt" /URL "http://google.com"'
     
    MsgBox(64, "", _
        _GetCmdLine($CmdLineRaw, "/Param=") & @LF & _
        _GetCmdLine($CmdLineRaw, "/URL") & @LF & _
        _GetCmdLine($CmdLineRaw, "-File"))
     
    Func _GetCmdLine($sCmdLine, $sArgument)
        Local $sRetCmd = StringRegExpReplace($sCmdLine, '(?i).*?' & $sArgument & '( |)("|)(.*?)("|)( /| -|$).*?$', '\3')
     
        Return StringStripWS($sRetCmd, 3)
    EndFunc

     
    Maza Faka 10:52 23-07-2008
    Цитата:
    Воодушевлённый твоими примерами накарябал примеры синхронизации скриптов

    Неплохо, но я бы отказался от использования файлов, моя первая попытка сделать интеракцию между скриптами выглядела примерно так:
     

    Код:
    #include <GuiConstants.au3>
     
    Global $AppTitle = "My App"
     
    $Main_GUI = GUICreate($AppTitle, 300, 200)
     
    $Reciever_Edit = GUICtrlCreateEdit("", -500, -500)
    GUICtrlSetState(-1, $GUI_HIDE)
     
    $CheckConnection_Button = GUICtrlCreateButton("Check Connection", 20, 160, 120, 20)
     
    GUISetState()
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case
    $CheckConnection_Button
                $InetIsConnected
    = _InetIsConnected() = 1
                MsgBox(64, "Results", "Inet is Connected: " & $InetIsConnected)
        EndSwitch
    WEnd
     
    Func
    _InetIsConnected()
        Local $sScript_Content = '#NoTrayIcon' & @CRLF
        $sScript_Content &= '$hWinInetDll = DllOpen("wininet.dll")' & @CRLF
        $sScript_Content &= 'If $hWinInetDll = -1 Then SendDataToParent(SetError(1, 0, -1))' & @CRLF
        $sScript_Content &= '$IsConnected = DllCall($hWinInetDll, "int", "InternetGetConnectedState", "int", 0, "int", 0)' & @CRLF
        $sScript_Content &= 'DllClose($hWinInetDll)' & @CRLF
        $sScript_Content &= 'If IsArray($IsConnected) Then' & @CRLF
        $sScript_Content &= '   SendDataToParent($IsConnected[0])' & @CRLF
        $sScript_Content &= 'Else' & @CRLF
        $sScript_Content &= '   SendDataToParent(False)' & @CRLF
        $sScript_Content &= 'EndIf' & @CRLF & @CRLF
        $sScript_Content &= 'Func SendDataToParent($sData)' & @CRLF
        $sScript_Content &= '   $iParent_WinHandle = WinGetHandle("[CLASS:AutoIt v3 GUI; TITLE:' & $AppTitle & ']")' & @CRLF
        $sScript_Content &= '   ControlSetText($iParent_WinHandle, "", "Edit1", $sData, 1)' & @CRLF
        $sScript_Content &= 'EndFunc' & @CRLF
     
        Local $sTmp_Script = @TempDir & "\AutoIt_Tmp_Script.call"
     
        Local $hOpen_Tmp_Script = FileOpen($sTmp_Script, 2)
        FileWrite($hOpen_Tmp_Script, $sScript_Content)
        FileClose($hOpen_Tmp_Script)
     
        RunWait(@AutoItExe & ' /ErrorStdOut /AutoIt3ExecuteScript "' & $sTmp_Script & '"', @ScriptDir, @SW_HIDE)
     
        Local $sRet_Data = GUICtrlRead($Reciever_Edit)
     
        GUICtrlSetData($Reciever_Edit, "")
        FileDelete($sTmp_Script)
     
        Return $sRet_Data
    EndFunc

     
    Присмотрись к строке ControlSetText($iParent_WinHandle, "", "Edit1", $sData, 1) из создаваемого скрипта в функции, там второй скрипт посылает данные в Edit-поле первого, а он с него читает эти данные. Т.е тот же принцип, но без записи данных в файлы.
     
    Добавлено:
    sproxy 11:01 23-07-2008
    Цитата:
    писать на более серьезных языках - лучше и выгоднее?

    Это смотря что писать
     

    Цитата:
    С чего начать изучение C?

    http://forum.ru-board.com/forum.cgi?forum=33
    Ну а также можно посмотреть книжку C++ для чайников.
     

    Цитата:
    програмка будильник, реализовать  
    на AutoIT лучше чем на Си....?

    Реализовать вполне можно, и очень даже неплохо, у меня есть такая затея, но нет для неё времени , на C... если есть знания, то конечно оно может получиться намного лучше, но на аутоите всё же это будет сделать проще
     
    ziherun 11:09 23-07-2008
    Цитата:
    скрипт должен определять ID окна и привязываться к этому номеру?

    Да, два одинаковых хендла (идентификатора) окна существовать немогут, для определения нужного можно посмотреть класс окна, с помощью Window Info Tool. В справке это всё написано.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 17:17 23-07-2008
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ViSiToR
    Спасибо за пример, но ты меня немного не понял Запись в файл это просто для примера, тут суть в том, что бы показать, что такое mutex, а именно ожидание вторым скриптом, момента, когда первый скрипт произведёт запись в файл и только потом второй скрипт произведёт чтение. Скажем если оба скрипта открывают файл для чтения, то дабы не возник "конфликт", второй скрипт будет открывать файл только после того, как первый скрипт закроет файл.
     
    P.S.
    Конечно всё это можно реализовать и без mutex-а, но с ним, IMHO будет правильней.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:03 23-07-2008 | Исправлено: Maza Faka, 18:05 23-07-2008
    sproxy



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

    Цитата:
    ребята! как установить черный (иль зеленый)  
    цвет шрифта в  за`DISABLE`нном Inout`е   ??
     
    мож есть еще замечательные функции UDF....

     
    решил так, стил - $ES_READONLY а далее отлично раскрашиватся
    GUICtrlSetColor( -1, 0xFF0000)...правда только Progress/Label

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 15:00 24-07-2008 | Исправлено: sproxy, 14:43 25-07-2008
    asdfzxcv



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скажи Maza Faka, мож есть случайно готовое решение (скрипт) для получения списка процессов с путями к файлам от куда они запущены. (и юудет ли он работать из (юзера или пверюзера)? через wmi мож как то прокатит.

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 17:42 24-07-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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru