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

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

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

    Цитата:
    frb_noname,
    Мне не понятно, что это за ComboBox с двумя колонками.

     
    Например вот так, как в Аксессе : Ссылка
     
    При этом в Аксессе есть возможность сделать нужную колонку неотображаемой.
     
    ViSiToR

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

    Попробую, остается только связать эти два элемента (думаю, что с этим проблем не будет)
     
    Если нет, тогда пойдем путем, описаннымAZJIO :
     

    Цитата:
    frb_noname
    Я бы сделал так: создал массив и на основе одной из его колонок создал бы комбо. Чтобы связать с массивом использовал бы _GUICtrlComboBoxEx_SetItemParam в котором использовал бы индекс элемента в массиве. Тогда при получении индекса массива получаем связанную с ним информацию.  

    Вариант :
    01-Капуста
    02-Пряники
    просто не хотелось использовать из эстетических соображений.
    Хочется не только приятного содержания, но и приятных форм
     
     

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 10:58 17-11-2011 | Исправлено: frb_noname, 11:00 17-11-2011
    Free_Soft



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

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Free_Soft 11:08 17-11-2011
    Цитата:
    В исходном скрипте ее, естесственно, нет. появляется в файле обфускатора при компиляции

    В какой кодировке сам скрипт?
    Не используется случаем Encoding.au3 UDF?

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

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



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

    Цитата:
    В какой кодировке сам скрипт?

    1251 ANSI
    Цитата:
    Не используется случаем Encoding.au3 UDF?
    Используется...


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

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



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

    Цитата:
    Используется...  

    Вот в нём и убери один раз и проблем не будет, это даже в теме Encoding.au3 отписывали.
     
    frb_noname
    А вариант по ссылке? Я ж для чего давал? Идеальный вариант, сам недавно узнал, только ещё в своих прогах не успел использовать.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 12:51 17-11-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    frb_noname
    Цитата:
    При этом в Аксессе есть возможность сделать нужную колонку неотображаемой.
    Ничего другого в голову не приходит.
    Код:
    #include <GUIComboBox.au3>
    #include <GuiConstantsEx.au3>
     
    Global $aData[3][2] = [[246, 'Ivanov'],[247, 'Petrov'],[248, 'Sidorov']], _
            $sDate
     
    $hGui = GUICreate('MyGUI', 200, 100)
    $nCombo = GUICtrlCreateCombo('', 75, 10, 50, 20, $CBS_DROPDOWNLIST)
    $iOpt = Opt('GUIDataSeparatorChar', '+')
    For $i = 0 To UBound($aData) - 1
        $sDate &= $aData[$i][0] & '   |   ' & $aData[$i][1] & '+'
    Next
    GUICtrlSetData(-1, $sDate, $aData[0][0] & '   |   ' & $aData[0][1])
    Opt('GUIDataSeparatorChar', $iOpt)
    $sDate = ''
    $aData = 0
    $nLabel = GUICtrlCreateLabel('', 0, 0, 0, 0)
    GUICtrlSetState(-1, $GUI_FOCUS)
    _GUICtrlComboBox_SetDroppedWidth($nCombo, 80)
    GUISetState()
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $nCombo
                $sDate = GUICtrlRead($nCombo)
                $aTemp = StringSplit($sDate, '|')
                $iID = StringStripWS($aTemp[1], 7)
                $sSomething = StringStripWS($aTemp[2], 7)
                MsgBox(64, 'Info', 'ID: ' & $iID & @LF & 'Something: ' & $sSomething, 0, $hGui)
                $sDate = ''
                $aTemp = 0
                $iID = ''
                $sSomething = ''
                GUICtrlSetState($nLabel, $GUI_FOCUS)
        EndSwitch
    WEnd


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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    аккуратно скопировал к себе в код
    http://forum.ru-board.com/topic.cgi?forum=5&topic=33902&start=1500#2
    теперь окно не в левом верхнем углу, а строго по центру открывается...

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

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



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

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Free_Soft 14:34 17-11-2011
    Цитата:
    теперь окно не в левом верхнем углу, а строго по центру открывается...

    Windows 7?
    У меня тоже проблема с этим примером, на XP работало .
    Видимо после прорисовки окно восстанавливается на исходную позицию (где было закрыто в последний раз).
     
    17:44 17-11-2011
    Цитата:
    как устроить проверку запуска второй копии скрипта?

    См. в справке _SingleTon, хотя вот так будет надёжнее:
     

    Код:
    _AppPreventSecondCopy('_OnSecondCopy_Proc')
     
    MsgBox(64, @ScriptName, 'First run')
     
     
    Func _OnSecondCopy_Proc()
        MsgBox(48, @ScriptName, 'Second copy detected, exiting...', 3)
        Exit
    EndFunc
     
    Func _AppPreventSecondCopy($sFuncProc = Default)
        If Not @Compiled Then
            Return SetError(1)
        EndIf
     
        Local $aProcList = ProcessList(@ScriptName)
     
        For $i = 1 To $aProcList[0][0]
            If $aProcList[$i][1] <> @AutoItPID Then
                If $sFuncProc = Default Then
                    Exit
                Else
                    Call($sFuncProc)
                EndIf
            EndIf
        Next
    EndFunc

     
    А ещё надёжнее, это проверять некое окно с уникальным заголовком, создаваемое после проверки
     
    Добавлено:
    19:06 17-11-2011
    Цитата:
    А ещё надёжнее, это проверять некое окно с уникальным заголовком, создаваемое после проверки

    Вот так:
     

    Код:
    _AppPreventSecondCopy('_OnSecondCopy_Proc')
     
    MsgBox(64, @ScriptName, 'First run')
     
     
    Func _OnSecondCopy_Proc()
        MsgBox(48, @ScriptName, 'Second copy detected, exiting...', 3)
        Exit
    EndFunc
     
    Func _AppPreventSecondCopy($sFuncProc = Default)
        ;Unique(?) window title
        Local $sTitle = @ScriptName & "_!@#$%^&*()_+_)(*&^%$#@!_"
     
        If WinExists($sTitle) Then
            If $sFuncProc = Default Then
                Exit
            Else
                Call($sFuncProc)
            EndIf
        EndIf
     
        AutoItWinSetTitle($sTitle)
    EndFunc


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

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



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

    Цитата:
    Вот так:  

    обфускатор ругается на call

    Код:
    -### StripOnly/StripFunc Error: Found Call() statement using unsolvable Func, which will/could lead to removal of Funcs that are used by the Call() statement.
    >### current Func: _AppPreventSecondCopy

     
    Добавлено:
    Брр..
    Чего не так делаю?

    Код:
    If Not StringRegExp($AdvMode, '(true|false)') Then IniWrite($IniFile, "Global", "AdvMode", "false")

    нужно перезаписать параметр, если его значение отличается от True и False. Но в поиске что-то напортачил... Заодно как сделать ентот поиск регистронезависимым?

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

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



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

    Цитата:
    регистронезависимым?

    Код:
    (?i)(true|false)


    Цитата:
    обфускатор ругается на call
    Ругается на call, Assign, Eval, IsDeclared, Execute, так как их содержимое может оказаться переменной величиной, которая в скрипте указывается явно, а обфускатор изменяет имена, но не может угадать значения этих функций. Поэтому выдаёт предупреждение. Нужно либо избавится от этих функций, либо разрешить продолжить обфускацию, если это не нарушит логичность действий, либо в параметрах обфускатора указать ключи, которые не будут обфуцировать переменные или функции или скрипт (а только подключаемые UDF), либо указать список необфуцируемых переменных или функций. Или даже отключить обфускацию.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 08:50 18-11-2011
    Free_Soft



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

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

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 10:22 18-11-2011 | Исправлено: Free_Soft, 10:34 18-11-2011
    madmasles

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

    Код:
    Global $sTitleScript = @ScriptName & '{[/@$@\]}'
     
    If WinExists($sTitleScript) Then
        MsgBox(16, 'Error', 'Программа уже работает, до свидания.')
        Exit
    EndIf
    AutoItWinSetTitle($sTitleScript)
    ;...
    MsgBox(64, 'Info', 'Сама программа')

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    madmasles
    Да, ступил. Нужно было просто вместо @ScriptName поставить свое постоянное значение, чтобы было срабатывание, если запускается этот же только переименованный скрипт.

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Free_Soft 10:22 18-11-2011
    Цитата:
    нашел _SingleTon. А можно с этой функцией вывести окно в случае попытки второго запуска?

    Можно, см. в справке есть пример.

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

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



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

    Цитата:
    _SingleTon, хотя вот так будет надёжнее

    а чем _SingleTon плох? не во всех случаях срабатывает?

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Free_Soft 15:31 18-11-2011
    Цитата:
    а чем _SingleTon плох? не во всех случаях срабатывает?

    Да, не во всех. От чего это зависит даже и не знаю

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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А вот этот пример
    http://forum.ru-board.com/topic.cgi?forum=5&topic=33902&start=1520#14
    может заменить ваш второй отсюда?
    http://forum.ru-board.com/topic.cgi?forum=5&topic=33902&start=1520#10

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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Free_Soft
    Цитата:
    Нужно было просто вместо @ScriptName поставить свое постоянное значение
    Я, если есть опция автозагрузки, обычно так делаю.
    Код:
    Global $sTitleScript = @ScriptName & '{[/@$@\]}'
     
    _CheckScriptName()
     
    If WinExists($sTitleScript) Then
        MsgBox(16, 'Error', 'Программа уже работает, до свидания.')
        Exit
    EndIf
    AutoItWinSetTitle($sTitleScript)
    ;...
    MsgBox(64, 'Info', 'Сама программа')
     
    Func _CheckScriptName()
        Local $s_Name, $s_Message = 'Файл переименован. Имя файла должно быть только: '
        If @Compiled Then
            $s_Name = 'MySuperProg.exe'
        Else
            $s_Name = 'MySuperProg.au3'
        EndIf
        If @ScriptName <> $s_Name Then
            MsgBox(16, 'Error', $s_Message & $s_Name)
            Exit
        EndIf
    EndFunc   ;==>_CheckScriptName

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    На сколько мне известно каждый запущенный скрипт имеет скрытое окно, даже если вы не создавали GUI.
    Достаточно задать ему уникальный заголовок и в дальнейшем проверять существует ли такое окно.
     
    AutoItWinSetTitle
    и
    WinExists

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 19:33 18-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