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

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



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

    Цитата:
    HKEY_CURRENT_USER\Software\Microsoft\DrWatson

    а как выставить атрибуты (разрешения) у ветки ...\DrWatson?

    Всего записей: 11230 | Зарегистр. 10-09-2008 | Отправлено: 12:34 27-07-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    opt_step
    могу посоветовать использовать утилиту командной строки - SetACL.

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 12:56 27-07-2010
    degid



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    opt_step
    тут пример проверки/изменения прав на VBS... Можно переделать в AutoIT

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 15:56 27-07-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    degid
    Да, переделывается легко. Получается примерно следующее

    Код:
    ;Этот скрипт проверяет наличие прав.
    ;Если делать не Check, а Set то будет менять

     
    Const $KEY_QUERY_VALUE = 0x0001
    Const $KEY_SET_VALUE = 0x0002
    Const $KEY_CREATE_SUB_KEY = 0x0004
    Const $DELETE = 0x00010000
    Const $HKEY_LOCAL_MACHINE = 0x80000002
    $strComputer = "."
    $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & _
            $strComputer & "\root\default:StdRegProv")
    $strKeyPath = "SYSTEM\CurrentControlSet"
     
    Local $bHasAccessRight
    $oReg
    .CheckAccess($HKEY_LOCAL_MACHINE, $strKeyPath, $KEY_QUERY_VALUE, $bHasAccessRight)
    If $bHasAccessRight = True Then
        ConsoleWrite("Have Query Value Access Rights on Key" & @CRLF)
    Else
        ConsoleWrite("Do Not Have Query Value Access Rights on Key" & @CRLF)
    EndIf
     
    $oReg.CheckAccess($HKEY_LOCAL_MACHINE, $strKeyPath, $KEY_SET_VALUE, $bHasAccessRight)
    If $bHasAccessRight = True Then
        ConsoleWrite("Have Set Value Access Rights on Key" & @CRLF)
    Else
        ConsoleWrite("Do Not Have Set Value Access Rights on Key" & @CRLF)
    EndIf
     
    $oReg.CheckAccess($HKEY_LOCAL_MACHINE, $strKeyPath, $KEY_CREATE_SUB_KEY, $bHasAccessRight)
    If $bHasAccessRight = True Then
        ConsoleWrite("Have Create SubKey Access Rights on Key" & @CRLF)
    Else
        ConsoleWrite("Do Not Have Create SubKey Access Rights on Key" & @CRLF)
    EndIf
     
    $oReg.CheckAccess($HKEY_LOCAL_MACHINE, $strKeyPath, $DELETE, $bHasAccessRight)
    If $bHasAccessRight = True Then
        ConsoleWrite("Have Delete Access Rights on Key" & @CRLF)
    Else
        ConsoleWrite("Do Not Have Delete Access Rights on Key" & @CRLF)
    EndIf

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 18:10 27-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил калькулятор, и при тесте столкнулся с проблемой больших чисел (вскользь на офсайте читал)

    Код:
    MsgBox(0, 'Message',7450580596923828125*5)
    результат умножения выдаёт меньший результат.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 03:56 28-07-2010 | Исправлено: AZJIO, 04:00 28-07-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO,
    BigNum UDF - Библиотека для работы с большими числами.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 09:29 28-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Уже лучше но запинается на следующем порядке  
    MsgBox(0, 'Message',_BigNum_Mul(37252902984619140625, 5))  
     
    Использовал числа как строковые переменные, тогда правильно считает...

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 09:48 28-07-2010 | Исправлено: AZJIO, 11:54 28-07-2010
    Xecutioner



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Есть такая программка CheckXML для проверки налоговой отчетности и отчетности в ПФР, у нее есть своя динамическая библиотека CPSNXML.dll к которой существует описание.
    При выполнении функции "cpsnValidate" autoit просто вылетает не говоря ни слова (появляется только окно отправить ошибку в мелкософт). Может быть я что-то неправильно делаю?
     
    Вот как в описании обозначаются переменные этой функции на Visual Basic:  
     

    Код:
    Declare Function cpsnValidate Lib "CPSNXML" (ByVal sXmlFileName As String, ByRef nError As Long, ByRef nWarning As Long) As Long

     
    Вот что я пишу на AutoIT:

    Код:
    ;Назначение переменных для вывода в них результата функции dll
    Global $iErrors, $iPredup
    ;Открываем библиотеку
    $dll = DllOpen(@ScriptDir & "\CheckXml\CPSNXML.dll")
    ;Выполняем функцию инициализации в библиотеке, назначаем путь к проверяемому файлу
    DllCall($dll,"long","cpsnInitLib2","long",0,"str",@ScriptDir & "\CheckXml","str",@ScriptDir & "\CheckXml\kladr")
    $path = "C:\123.xml"
    ;Выполняем функцию проверки и выводим результат ошибок в $iErrors, предупреждений в $iPredup
    DllCall($dll,"long","cpsnValidate","str",$sPath,"long",$iErrors,"long",$iPredup)
    ;Закрываем библиотеку
    DllClose($dll)

     
    Если же я выполняю обрезанную функцию "cpsnValidateZ" вместо "cpsnValidate", которая не выводит информацию об ошибках, то все проходит успешно. Может быть я неправильно использую вывод значений об ошибках в переменную?

    Всего записей: 6 | Зарегистр. 28-02-2008 | Отправлено: 09:57 28-07-2010 | Исправлено: Xecutioner, 10:00 28-07-2010
    Loopback



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Xecutioner
    По-видимому, в качестве второго-третьего параметра требуется указатель на целое (в VB "ByRef"). Попробуй записать так:

    Код:
     
    DllCall($dll,"long","cpsnValidate","str",$sPath,"long*",$iErrors,"long*",$iPredup)
     

     
    Кстати, Autoit не вернет число ошибок в $iErrors, это значение надо будет брать из массива, который возвращает DllCall.

    Всего записей: 174 | Зарегистр. 08-03-2002 | Отправлено: 11:50 28-07-2010 | Исправлено: Loopback, 11:53 28-07-2010
    AZJIO



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

    Код:
    If StringLen($rech)>20 And Not(StringInStr($rech, 'e+') Or StringInStr($rech, 'e-')) Then
        If StringLen(Int($rech))>20 Then
            $r1 = StringMid($rech, 1, 1)
            $exp=StringLen(Int($rech))-1
            If StringLen($exp)<3 Then $exp='0'&$exp
            If StringLen($exp)<3 Then $exp='0'&$exp
            $rech=$r1&'.'&StringTrimLeft(StringTrimRight(Int($rech),5),1)&'e+'$exp
        Else
            If StringMid($rech, 1, 1)<>0 Then
                $Npt = StringInStr($rech, '.')
                $rech= Round($rech, 20-$Npt)
            Else
                $aRech1=StringRegExp($rech, '(0\.)(0*)(\d+)',3)
                $exp=StringLen($aRech1[1])+1
                $r1 = StringMid($aRech1[2], 1, 1)
                $rech=$r1&'.'&StringTrimLeft($aRech1[2],1)
                $rech= Round($rech, 15)&'e-'&$exp
            EndIf
        EndIf
    EndIf
     
    Func _ConvNumP($num)
        $exp='1'
            $aRech1=StringSplit($num, '+')
            For $i = 1 to Execute($aRech1[2])
                $exp&='0'
            Next
            $num = _BigNum_Mul(StringTrimRight($aRech1[1],1), $exp)
        Return $num
    EndFunc
     
    Func _ConvNumM($num)
        $exp='1'
            $aRech1=StringSplit($num, '-')
            For $i = 1 to $aRech1[2]
                $exp&='0'
            Next
            $num = _BigNum_Div(StringTrimRight($aRech1[1],1), $exp,'200')
        Return $num
    EndFunc

    BigNum.au3 не воспринимает запись с мантисой и экспонентой, пришлось делать обратную конвертацию.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 12:12 28-07-2010 | Исправлено: AZJIO, 16:59 29-07-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Строки деления требуют указать величину разрядности, например 200
     MsgBox(0, 'Message',_BigNum_Div('0.0001', '41','200'))
     MsgBox(0, 'Message',_BigNum_Div(0.0001, 41,200)

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 14:19 28-07-2010 | Исправлено: AZJIO, 17:02 29-07-2010
    Xecutioner



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Loopback
    Спасибо! все замечательно работает.
    Раз DllCall сам по себе является массивом с результатом выполненных функций, а не записывает их в переменные, то $iErrors и $iPredup в моем примере не нужны.

    Цитата:
    По-видимому, в качестве второго-третьего параметра требуется указатель на целое (в VB "ByRef"). Попробуй записать так:
     
    Код:
     
    DllCall($dll,"long","cpsnValidate","str",$sPath,"long*",$iErrors,"long*",$iPredup)
     
     
     
    Кстати, Autoit не вернет число ошибок в $iErrors, это значение надо будет брать из массива, который возвращает DllCall.


    Всего записей: 6 | Зарегистр. 28-02-2008 | Отправлено: 15:19 28-07-2010 | Исправлено: Xecutioner, 15:23 28-07-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    иногда подвисает iexplorer.exe, те окна не  видно, а процесс висит. как бы определить такой процесс и убить? можно сравнить количество процессов со списком окон, но как потом выбрать какой из процессов убить а какой живой?

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 16:21 28-07-2010
    AZJIO



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

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 03:43 29-07-2010 | Исправлено: AZJIO, 05:40 30-07-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ!
    Третий час сижу туплю, не могу понять почему DllCall не ищет простейший Блокнот....
     

    Код:
    $a = DllCall("User32.dll", "hwnd", "FindWindowA", _
    "str", "", _
    "str", "Безымянный - Блокнот")
     
    MsgBox (0, '', $a[0])

     
    Блокнот естественно запущен....

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 00:42 02-08-2010 | Исправлено: Lovec, 00:43 02-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Lovec 00:42 02-08-2010
    Цитата:
    почему DllCall не ищет простейший Блокнот

    Потому что функции нужны оба параметра, как заголовок окна, так и его класс:
     

    Код:
    $a = DllCall("User32.dll", "hwnd", "FindWindow", _
        "str", "Notepad", _ ;Class
        "str", "Безымянный - Блокнот")
     
    MsgBox (0, '', $a[0])

     
    а вообще в WinAPI.au3 уже есть такая функция:

    Код:
    _WinAPI_FindWindow()


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 01:12 02-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Спасибо, уважаемый. Так действительно работает
     
    Но вот вопрос. смотрим MSDN:

    Код:
    HWND WINAPI FindWindow(
      __in_opt  LPCTSTR lpClassName,
      __in_opt  LPCTSTR lpWindowName
    );

     
    Не означает ли надпись "__in_opt", что этот параметр входящий и необязательный?
    Читаем ниже. Про первый параметр написано:

    Цитата:
    If lpClassName is NULL, it finds any window whose title matches the lpWindowName parameter.
    - т.е. допускается его пустое (NULL) значение.
    Тоже самое видим и про второй параметр.
     
    Вот я, веря MSDN и пытался использовать только один параметр....

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 11:50 02-08-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Lovec 11:50 02-08-2010
    Цитата:
    Вот я, веря MSDN и пытался использовать только один параметр

    Нет, пустая строка ("") совсем не означает Null , нужно указать там «"int", 0».

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 12:18 02-08-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    И снова ты прав Сенкс.
     
    Может подскажешь еще... Вот есть API-функция GetDiskFreeSpace.
    Вот откуда простой человек, не работающий в Microsoft, может знать что она возвращает массив данных и что именно в каком элементе массива хранится?? Ведь в MSDN об этом ни слова Все справочники по API что я видел - лишь жалкая копия MSDN и от них толку не более.
    Откуда же люди берут эту инфу???

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 16:18 02-08-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ли как-то в локалке получить имена машин, зная ИП адреса? на всех машинах есть права админа

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 16:31 02-08-2010
       

    Страницы: 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