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

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Free_Soft 17:16 16-11-2011
    Цитата:
    почему не срабатывает

    Встречный вопрос - как ты пришёл к такому выводу?
     

    Цитата:
    как скрыть с панели задач дочерние msgBox и окно выбора файла

    Использовать последний параметр hWnd.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 17:41 16-11-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Сразу скажу, что тока учусь, в скриптах три дня, так что сильно не пинать)

    Код:
    If @OSVersion <> 'WIN_VISTA' or @OSVersion <> 'WIN_7' Then
        GUICtrlCreateLabel("Unsupported OS.", 115, 170, 120, 25)
    Else
        $Group10 = GUICtrlCreateGroup("Activate", 28, 120, 256, 50)
    EndIf

    Или я логики не понял? короче, нужно, если не Vista и не Win7 сказать "Unsupported OS."
     
    Добавлено:

    Цитата:
    Использовать последний параметр hWnd

    Это типа так?

    Код:
    MsgBox(0, "bla-bla", $line3, hWnd)


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

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 17:46 16-11-2011
    frb_noname

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

    Цитата:
    Код:
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
     
    Global $aData[3][4] = _
            [['Иванов', 'Ivanov', '+79034450911', 'Водолей'], _
            ['Петров', 'Petrov', '+79036780019', 'Рак'], _
            ['Сидоров', 'Sidorov', '+79031096788', 'Весы']]
     
    Global $sDate
    Dim $aInput[UBound($aData, 2)]
     
    $hForm = GUICreate('MyGUI', 300, 161)
    For $i = 0 To UBound($aInput) - 1
        $aInput[$i] = GUICtrlCreateInput($aData[0][$i], 10, 10 + 30 * $i, 100, 19, $ES_READONLY)
    Next
    $nCombo = GUICtrlCreateCombo('', 10, 130, 280, 21, $CBS_DROPDOWNLIST)
    For $i = 0 To UBound($aData) - 1
        $sDate &= $aData[$i][0] & '|'
    Next
    GUICtrlSetData(-1, $sDate, $aData[0][0])
    $sDate = ''
    GUISetState()
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $nCombo
                $Index = GUICtrlSendMsg($nCombo, $CB_GETCURSEL, 0, 0)
                For $i = 0 To 3
                    GUICtrlSetData($aInput[$i], $aData[$Index][$i])
                Next
        EndSwitch
    WEnd

     
    Насколько я понял, combo обычный, не с двумя колонками, просто обращение ведется по индексу строки в элементе, а не по значению.
     
    Отсюда у меня снова вопрос возник, т .к. у меня идет работа с БД.  
    Как сделать, чтобы в комбо поместить в КАЖДУЮ строку ДВА поля, одно из которых не отображается для пользователя ?  
    Это необходимо, чтобы потом из БД можно было выбрать связанную информацию по ID записи таблицы.
     
    Как именно перекинуть данные из БД в комбо - в принципе понятно.
    Не ясно как создать комбо с ДВУМЯ КОЛОНКАМИ ?  
    Есть ли такая возможность ?  
    Как приспособить Ваш пример к моей ситуации к сожалению пока не пойму...

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 18:27 16-11-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    frb_noname,
    Мне не понятно, что это за ComboBox с двумя колонками.

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Free_Soft 17:46 16-11-2011
    Цитата:
    нужно, если не Vista и не Win7 сказать "Unsupported OS."

    Заметь что я выделил, особенно красным.
    У тебя в условий используется «или» (Or) вместо «и» (And).
     

    Код:
    If @OSVersion <> 'WIN_VISTA' And @OSVersion <> 'WIN_7' Then

     

    Цитата:
    Это типа так?

    Нет, последний параметр это пятый после запятой, и там нужно указать настоящий hwnd (дескриптор/идентификатор окна).
     

    Код:
    #include <GUIConstantsEx.au3>
     
    $hGUI = GUICreate("Test Script", 300, 200)
    $nButton = GUICtrlCreateButton("Button", 20, 40, 60, 20)
     
    GUISetState(@SW_SHOW, $hGUI)
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $nButton
                MsgBox(64, 'Title', 'Hello world', 0, $hGUI) ;$hGUI в нашем случае это дескриптор окна (наш GUI, то что возвращает функция GUICreate)
        EndSwitch
    WEnd

     
    Добавлено:
    frb_noname 18:27 16-11-2011
    Цитата:
    Не ясно как создать комбо с ДВУМЯ КОЛОНКАМИ ?  

    А не проще создать два Combobox, одно отображается для пользователя (в нём всё что тот должен видеть), а другое нет (в нём всё что должно быть скрыто от пользователя)?

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 19:21 16-11-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Пасиб, получилось. а как скрыть на панели задач от этого

    Код:
    $tmp = FileOpenDialog("Select archive storage", @WorkingDir & "", "Archive storage" &" (*.of14archive)", 1)


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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Цитата:
    нужно, если не Vista и не Win7 сказать "Unsupported OS."
    Так тоже можно.
    Код:
    If StringRegExp(@OSVersion, '_(7|V)') Then
        MsgBox(64, 'Info', 'WIN_7 or WIN_VISTA')
    Else
        MsgBox(16, 'Error', 'Unsupported OS.')
    EndIf

     

    Цитата:
    а как скрыть на панели задач

    Также указать последний параметр
    Код:
    ;...
    $tmp = FileOpenDialog("Select archive storage", @WorkingDir & "", "Archive storage" & " (*.of14archive)", 1, '', $hGUI)
    ;...


    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 19:48 16-11-2011 | Исправлено: madmasles, 19:54 16-11-2011
    231930

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скажите, пожайлуста, можно выполнить такой скрипт?
     
    1. Запускаем программу "А"

    Код:
     
    #NoTrayIcon
    Run("App\А.exe")
     

    2. Когда программа отработает, запускается программа "B" из этой же папки "App" и в этой же папке она создаст некий каталог "Папка" и параметр в рестре HKLM\Sofware\"App"
    3. После того, как программа "B" отработает ( зарыть её), скрипт бы удалил каталог App\"Папка"  

    Код:
     
    DirRemove("App\Папка", 1)
     

    и параметр в реестре

    Код:
     
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\"App")
     

    Сумбурно как-то, я только пытаюсь научиться.

    Всего записей: 942 | Зарегистр. 05-05-2011 | Отправлено: 19:55 16-11-2011
    Free_Soft



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

    Цитата:
    Также указать последний параметр

    получилось, но теперь почему-то окно открывается не в левом верхнем углу как обычно, а привязано к углу родительского GUI...
     
     
    Добавлено:
    Перенаправляю поток:

    Код:
                $potok1 = Run("cscript.exe //nologo " & "slmgr.vbs -dlv", @SystemDir, @SW_HIDE, 6)
                $line1=''
                While 1
                        $line = StdoutRead($potok1)
                        If @error Then ExitLoop
                    $line1 &= $line
                Wend
                MsgBox(0, 'mini-KMS Activator - Windows License Status', $line1)

    но фигня с кодировкой. на русской винде крякозябры. Как поправить?

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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Цитата:
    на русской винде крякозябры. Как поправить?
    Encoding UDF - Библиотека для работы с кодировками строк
     

    Цитата:
    но теперь почему-то окно открывается не в левом верхнем углу как обычно, а привязано к углу родительского GUI
    Можно так поизвращаться
    Код:
    #include <GUIConstantsEx.au3>
    #include <File.au3>
     
    $hGUI = GUICreate('Test Script', 300, 200)
    $nButton = GUICtrlCreateButton('Button', 20, 40, 60, 20)
    GUISetState(@SW_SHOW, $hGUI)
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $nButton
                $sTitle = 'Select archive storage'
                _MoveWindow($sTitle, 1, 1)
                $sFile = FileOpenDialog($sTitle, @WorkingDir & '', 'Archive storage' & ' (*.of14archive)', 1, '', $hGUI)
                If @error Then ContinueLoop
                MsgBox(64, 'Info', $sFile, 0, $sFile)
        EndSwitch
    WEnd
     
    Func _MoveWindow($s_Title, $i_X = 0, $i_Y = 0)
        Local $s_TempFile, $h_File
        Local $s_Script = "#NoTrayIcon" & @CRLF & _
                "Opt('WinWaitDelay', 0)" & @CRLF & _
                "_ScriptDestroy()" & @CRLF & _
                "$hWin = WinWait('[Title:" & $s_Title & "; Class:#32770]', '', 10)" & @CRLF & _
                "If Not $hWin Then Exit" & @CRLF & _
                "WinMove($hWin, '', " & $i_X & ", " & $i_Y & ")" & @CRLF & _
                "Exit" & @CRLF & _
                "Func _ScriptDestroy()" & @CRLF & _
                "Local $s_TempFile, $h_File, $s_Path = FileGetShortName(@ScriptFullPath), _" & @CRLF & _
                "$s_TextCmd = '@echo off' & @CRLF & ':loop' & @CRLF & 'del ' & $s_Path & @CRLF & _" & @CRLF & _
                "'if exist ' & $s_Path & ' goto loop' & @CRLF & 'del %0'" & @CRLF & _
                "Do" & @CRLF & _
                "$s_TempFile = ''" & @CRLF & _
                "For $i = 1 To 5" & @CRLF & _
                "$s_TempFile &= Chr(Random(97, 122, 1))" & @CRLF & _
                "$s_TempFile &= Chr(Random(48, 57, 1))" & @CRLF & _
                "Next" & @CRLF & _
                "$s_TempFile = @TempDir & '\~' & $s_TempFile & '.bat'" & @CRLF & _
                "Until Not FileExists($s_TempFile)" & @CRLF & _
                "$h_File = FileOpen($s_TempFile, 2)" & @CRLF & _
                "FileWrite($h_File, $s_TextCmd)" & @CRLF & _
                "FileClose($h_File)" & @CRLF & _
                "Run($s_TempFile, '', @SW_HIDE)" & @CRLF & _
                "EndFunc"
        $s_TempFile = _TempFile()
        $h_File = FileOpen($s_TempFile, 2)
        FileWrite($h_File, $s_Script)
        FileClose($h_File)
        If @Compiled Then
            Run('"' & @ScriptFullPath & '" /AutoIt3ExecuteScript "' & $s_TempFile & '"')
        Else
            Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & $s_TempFile & '"')
        EndIf
    EndFunc   ;==>_MoveWindow

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 22:04 16-11-2011 | Исправлено: madmasles, 22:14 16-11-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    frb_noname
    Я бы сделал так: создал массив и на основе одной из его колонок создал бы комбо. Чтобы связать с массивом использовал бы _GUICtrlComboBoxEx_SetItemParam в котором использовал бы индекс элемента в массиве. Тогда при получении индекса массива получаем связанную с ним информацию.
    Второй вариант, который я использовал раньше - в имена элементов списка в начало строки добавлял индекс, например
    01-Капуста
    02-Пряники
    Далее читаешь левые два символа выбранного пункта и имеешь индекс связанного с ним данных в массиве. Индек можно указывать без 0 и получать регуляркой способом число до первого тире или функцией Execute можно отрезать лишний 0, но строго читать левые два символа.
    Ещё можно сделать поиск выбранного элемента в массиве _ArraySearch, которая возвращает индекс найденного элемента и ищет в указанной колонке и в указанном диапазоне индексов массива.

    Всего записей: 4412 | Зарегистр. 03-05-2006 | Отправлено: 22:28 16-11-2011 | Исправлено: AZJIO, 22:34 16-11-2011
    Free_Soft



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

    Цитата:
    Encoding UDF - Библиотека для работы с кодировками строк

    Хм... все равно крякозябры. Даже в его примерах...
     
    И еще, как можно проверить состояние службы?

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

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 22:32 16-11-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Если на autoit-script.ru вбить поиск _Encoding_866To1251 то найдётся десяток примеров использования.

    Всего записей: 4412 | Зарегистр. 03-05-2006 | Отправлено: 22:48 16-11-2011 | Исправлено: AZJIO, 22:49 16-11-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Спасибо, разобрался..


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

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 23:20 16-11-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Есть несколько UDF для работы со службами, но не уверен что всё так просто.
    arcker
    engine
    Xenobiologist
    GEOSoft

    Всего записей: 4412 | Зарегистр. 03-05-2006 | Отправлено: 23:23 16-11-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Ну мне пока только проверить на существование нужно, так что вроде подошло.
    А как из скрипта с WMI можно работать?

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

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 23:44 16-11-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Обычно вбиваешь имя функции в строку поиска на офсайте и получаешь готовый пример, например CompInfo

    Всего записей: 4412 | Зарегистр. 03-05-2006 | Отправлено: 00:06 17-11-2011 | Исправлено: AZJIO, 00:07 17-11-2011
    Free_Soft



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

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Допустим
    Код:
    Return _FuncName()
    Вторая функция возвратит результат в точку вызова, а Return - возвратит в точку вызова первой функции.

    Всего записей: 4412 | Зарегистр. 03-05-2006 | Отправлено: 00:23 17-11-2011 | Исправлено: AZJIO, 00:28 17-11-2011
    Free_Soft



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    ммм... при запуске второй функции из "родительской" функции нужно выйти... Или я не понял?

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

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 00:30 17-11-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