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

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

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

gyra (23-01-2020 10:51): AutoIT (Часть 4)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

Widok



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

 
Описание:

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

 
  • Справки
  • Инструменты
  • Ресурсы, посвящённые AutoIt
  • Полезные советы новичкам и не только
  • Готовые решения
  • Скрипт раскраски кода AutoIt для публикации в форумах
     


     
    За шапкой следит ViSiToR / AZJIO  

  • Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 13:07 01-06-2010 | Исправлено: Maz, 12:29 10-01-2020
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Перезалил справку, зеркало (10 Мб)

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 14:20 11-12-2011 | Исправлено: AZJIO, 06:40 15-12-2011
    GAlexG



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет, прошу помощи. Суть в том, что простенький скрипт, назначение которого по нажатии одной из клавиш, например "s" нажать мышкой в определённые части экрана. На 2 компах работает, но вот попался ноут asus который на нажатие клавиши s не реагирует никак. Вот кусок скрипта:
     
    HotKeySet ("s" ,"normal")
    Opt("MouseClickDelay", 40)
     
    ;Закрытие случайных окон эксплорера
    While 1
        WinWait ( "Сообщение с веб-страницы")  
            If WinExists ( "Сообщение с веб-страницы") Then
            WinActive("Сообщение с веб-страницы")  
            Send ("{enter}")
            EndIf
        Sleep(10)
    WEnd
     
    Func normal()
        MouseMove(650, 160, 2)
        MouseClick("left")
        MouseMove(650, 225, 2)
        MouseClick("left")
        MouseMove(540, 190, 2)
    EndFunc
     
    Помогите кто может.
     
    p.s. Этот несчастный asus прекрасно реагирует на скрипт, если вместо s задать любую из цифр, но такой вариант не подходит.

    Всего записей: 17 | Зарегистр. 13-01-2008 | Отправлено: 22:20 11-12-2011 | Исправлено: GAlexG, 22:28 11-12-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GAlexG
    Посмотри это. Спасибо ViSiToR, проблема в данном контексте была решена и я это использовал в RegExp
     
    А здесь я немного модернизировал код, чтобы возвращать раскладку по умолчанию. К примеру у меня русский язык по умолчанию, для регистрации хоткеев раскладка временно переключается на английский, потом на русский.

    Код:
    ; http://forum.ru-board.com/topic.cgi?&forum=5&topic=33902&start=780#16
    ; осуществил реализацию ViSiToR, добавил восстановление стартовой раскладки AZJIO

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
     
    $hGUI = GUICreate("Fix for hotkey/Accelerators assign problem", 300, 200)
    $nEdit = GUICtrlCreateEdit("", 20, 40, 260, 120)
     
    $nDummy = GUICtrlCreateDummy()
    Dim $aAccelKeys[1][2] = [["^a", $nDummy]]
     
    ; если раскладка не совпадает с англ. яз. то временно переключаем в неё, чтобы зарегистрировать горячие клавиши
    $tmp=0
    $KeyLayout = RegRead("HKCU\Keyboard Layout\Preload", 1)
    If Not @error And $KeyLayout <> 00000409 Then
       _WinAPI_LoadKeyboardLayout(0x0409)
        $tmp=1
    EndIf
     
    HotKeySet("^+e", "_Quit")
    GUISetAccelerators($aAccelKeys)
    If $tmp=1 Then _WinAPI_LoadKeyboardLayout(Dec($KeyLayout)) ; восстанавливаем раскладку по умолчанию
     
    GUISetState(@SW_SHOW, $hGUI)
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case
    $nDummy
                GUICtrlSendMsg($nEdit, $EM_SETSEL, 0, -1)
        EndSwitch
    WEnd
     
    Func
    _Quit()
        Exit
    EndFunc
     
    Func
    _WinAPI_LoadKeyboardLayout($sLayoutID, $hWnd = 0)
        Local Const $WM_INPUTLANGCHANGEREQUEST = 0x50
        Local $aRet = DllCall("user32.dll", "long", "LoadKeyboardLayoutW", "wstr", Hex($sLayoutID, 8), "int", 0)
     
        If Not @error And $aRet[0] Then
            If
    $hWnd = 0 Then
                $hWnd = WinGetHandle(AutoItWinGetTitle())
            EndIf
     
            DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $aRet[0])
            Return 1
        EndIf
     
        Return
    SetError(1)
    EndFunc

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 05:07 12-12-2011 | Исправлено: AZJIO, 00:43 13-12-2011
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В последних бетках (3.3.7.xx) баг появился.

    Код:
    #include <WinAPIEx.au3>
    $sGuid = _WinAPI_GetVolumeNameForVolumeMountPoint('c:\')
    $sStatus=DriveStatus($sGuid)
    MsgBox(262144,'Status',$sStatus)
    $sType=DriveGetType($sGuid)
    MsgBox(262144,'Type',$sType)

     
    В 3.3.6.1 DriveStatus отрабатывает правильно, в бетке - нет, хотя DriveGetType нормально в обеих.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 06:05 12-12-2011
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    NIKZZZZ 06:05 12-12-2011
    Цитата:
    В последних бетках (3.3.7.xx) баг появился.

    Начиная где то с 3.3.7.5, т.к к примеру в 3.3.7.1 бага ещё не было.
     
    Нужно отрепортить. Создал тикет.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 06:29 12-12-2011 | Исправлено: ViSiToR, 06:39 12-12-2011
    GAlexG



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Спасибо за подсказку, вечером непременно попробую
     
    p.s. Попробовал, всё получилось - спасибо ещё раз !

    Всего записей: 17 | Зарегистр. 13-01-2008 | Отправлено: 18:40 12-12-2011 | Исправлено: GAlexG, 20:06 12-12-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как перехватить событие нажатия правой кнопкой мыши на кнопке?
    Идея такова: для ButtonBar создаётся много кнопок и делать опрос каждой кнопки и каждого элемента меню для каждой кнопки нерационально. Сделал пустышку Dummy и его контекстное меню, которое нужно открыть при правом клике на любой кнопке. Попробовал WM_RBUTTONDOWN, но это срабатывает на клиентской области не занятой кнопками, WM_COMMAND срабатывает только от девой кнопки. Посмотрел константы на правый клик, их там нет. Возможно WM_NOTIFY + $BCN_HOTITEMCHANGE + _IsPressed

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 16:01 13-12-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Цитата:
    Возможно WM_NOTIFY + $BCN_HOTITEMCHANGE + _IsPressed
    А если WM_NOTIFY + $BCN_HOTITEMCHANGE + GUIGetCursorInfo()? Или один GUIGetCursorInfo()?

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 16:16 13-12-2011 | Исправлено: madmasles, 16:17 13-12-2011
    kmax2003

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ребята помогите во время исполнения скрипта  в системе какбы западают клавиши shift  и еще ченить такое хз . как избавиться  ??  ?
    Global $Paused
    HotKeySet("{PAUSE}", "TogglePause") ;Назначение горячей клавиши. При нажатии Pause Break скрипт встанет на паузу
     
     
    Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
    sleep(100)
    WEnd
    EndFunc
     
    Opt('SendKeyDelay', 2500)
     
    If @error Then Exit
    $aWinList = WinList('World of Warcraft')
    $pid = WinGetProcess("World of Warcraft")
     
    For $i = 1 To $aWinList[0][0] Step +1
        If WinGetProcess($aWinList[$i][1]) = $Pid Then
            for $s=1 to 10        
                 ControlSend($aWinList[$i][1], '', '', '{F7}')
            Next
        ExitLoop
        EndIf
     
    Next

    Всего записей: 32 | Зарегистр. 01-03-2006 | Отправлено: 13:06 16-12-2011
    Free_Soft



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

    Код:
    Dim $avArray[10]
    $avArray[0] = $par0
    $avArray[1] = $par1
    $avArray[2] = $par2
    $avArray[3] = $par3
    $avArray[4] = $par4
    $avArray[5] = $par5
    $avArray[6] = $par6
    $avArray[7] = $par7
    $avArray[8] = $par8
    $avArray[9] = $par9

    Как выполнить команду, если все переменные из массива будут иметь пустые (нулевые) значения?

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 15:35 18-12-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft,
    Попробуйте так.
    Код:
    ;...
    $fYes = False
    For $i = 0 To UBound($avArray) - 1
        If $avArray[$i] Then
            $fYes = True
            ExitLoop
        EndIf
    Next
    If $fYes Then
        MsgBox(64, 'Info', 'Есть не пустые значения')
    Else
        MsgBox(64, 'Info', 'Все значения пустые')
    EndIf
    Пустыми будут значения 0(цифра) и "".

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 16:55 18-12-2011 | Исправлено: madmasles, 17:00 18-12-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Получилось, спасибо. Еще не подскажете, как правильно создать многомерный массив?
    Суть в следующем:
     

    Код:
    $OnlineKMS0h_Input = GUICtrlCreateInput('', 84, 78, 104, 18)
    $OnlineKMS0p_Input = GUICtrlCreateInput('', 222, 78, 45, 18, $ES_NUMBER)
    ....
    $OnlineKMS9h_Input = GUICtrlCreateInput('', 84, 78, 104, 18)
    $OnlineKMS9p_Input = GUICtrlCreateInput('', 222, 78, 45, 18, $ES_NUMBER)
     
    Dim $avArray[10]
    $avArray[0] = GUICtrlRead($OnlineKMS0h_Input) & ':' & GUICtrlRead($OnlineKMS0p_Input)
    ...
    $avArray[9] = GUICtrlRead($OnlineKMS9h_Input) & ':' & GUICtrlRead($OnlineKMS9p_Input)

    как в массив добавить еще по отдельности $OnlineKMS0h_Input и $OnlineKMS0p_Input, чтобы потом в цикле применить к ним GUICtrlSetColor?

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 17:34 18-12-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft,
    Можно так попробовать.
    Код:
    #include <GUIConstantsEx.au3>
     
    Dim $aInput[11][2] = [[10]]
     
    GUICreate('Test', 170, 10 + $aInput[0][0] * 30)
    For $i = 1 To $aInput[0][0]
        $aInput[$i][0] = 'Test ' & $i
        $aInput[$i][1] = GUICtrlCreateInput($aInput[$i][0], 35, 10 + ($i - 1) * 30, 100, 20)
        If Mod($i, 2) Then
            GUICtrlSetColor(-1, 0x0000FF)
        Else
            GUICtrlSetColor(-1, 0xFF0000)
        EndIf
    Next
    GUISetState()
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 17:59 18-12-2011 | Исправлено: madmasles, 20:34 18-12-2011
    agarrio

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день.
    Написал скрипт для печати из T-Flex с выбором параметров печати.

    Код:
    Send("^p")
    WinWaitActive("[TITLE:Печать]") ; ждем окна печати
    ControlCommand ( "Печать", "", 1139, "SelectString", '2016') ;выбираем принтер 2016
    ControlClick ( "Печать", "", 1025) ; заходим в свойства печати
    WinWaitActive("[Свойства: 2016]") ;ждем окна свойств
    ControlCommand ( "Свойства: 2016", "", 10018, "SelectString", 'A4') ;выбор формата а4
    ControlCommand ( "Свойства: 2016", "", 10026, "Check", "") ;выбор портрета
    ControlClick ( "Свойства: 2016", "", 1) ; нажать ОК
    WinWaitClose("Свойства: 2016") ;ожидание закрытия окна
    ControlClick ( "Печать", "", 1029) ; Просмотр
    WinWaitActive("[TITLE:Параметры печати]") ; ожидание
    ControlCommand ( "Параметры печати", "", 116, "Check", "") ;чекбокс центр
    ControlCommand ( "Параметры печати", "", 117, "Check", "") ;чекбокс уместить на страницу
    ControlClick ( "Параметры печати", "", 122) ; предпросмотр
    ControlClick ( "Параметры печати", "", 1) ; ОК
    WinWaitClose( "Параметры печати")
    ControlClick ( "Печать", "", 1) ; печать

    Но при первой печати после запуска приложения окно Свойства: 2016 остается открытым, хотя строки ниже закрытия этого окна выполняются. А вторая и последующая печать проходят нормально. Уже и проверку закрытия поставил. Не могу понять в чем дело, может задержки какие поставить надо? Прошу совета.

    Всего записей: 38 | Зарегистр. 20-10-2009 | Отправлено: 09:59 19-12-2011 | Исправлено: agarrio, 11:05 19-12-2011
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    хочу сделать у себя хоткей {delete}. все работает но когда выполняется скрипт, delete в других программах не работает(его скрипт перехватывает). как сделать чтоб скрипт захватывал кнопку delete только когда окно скрипта активно?
    пробовал что то типа "if not winactive('MyName') then" но не получилось

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 10:09 19-12-2011 | Исправлено: Kar1son, 10:09 19-12-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son,
    С помощью этой UDF HotKey - Установка горячих клавиш можно привязать горячую клавишу к конкретному окну.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 11:09 19-12-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Используй GUISetAccelerators. Горячая клавиша при этом работает только в окне и только для конкретного элемента интерфейса, при чём можно две и более горячих клавиш назначить элементу. Если надо просто добавить горячую клавишу (не к элементу), то создаётся пустышка GUICtrlCreateDummy и ему назначается горячая клавиша, то есть самого элемента в GUI не будет, а горячая клавиша есть. Таких пустышек можно создавать сколько угодно, соотвественно столько же горячих клавиш.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 14:05 19-12-2011 | Исправлено: AZJIO, 14:08 19-12-2011
    Free_Soft



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

    Код:
    Case $msg = $LogOpen
    If FileExists($LogFile) Then
    ShellExecute('Notepad.exe', $LogFile, @SystemDir, 'open')
    EndIf

     
    Как послать блокноту Send(^{END}), чтобы лог всегда на конце открывался?

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 14:33 19-12-2011
    madmasles

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

    Код:
    ;...
    $hWin = WinWait('[Class:Notepad]', '', 5)
    If $hWin Then
        ControlSend($hWin, '', '[CLASS:Edit; INSTANCE:1]', '^{END}')
    EndIf

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 14:44 19-12-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Спасибо)
    Еще вопрос: можно ли поверх графического изображения (GUICtrlSetImage) написать текст? если нет, как создать поверх прозрачный GUI с непрозрачной текстовой надписью?

    ----------
    На вашей перфокартѣ обнаруженъ вирусъ, механизмъ будетъ остановленъ.

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 15:15 19-12-2011
       

    Страницы: 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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)
    gyra (23-01-2020 10:51): AutoIT (Часть 4)


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru