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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 | Цитировать | Сообщить модератору
    Lovec 16:18 02-08-2010
    Цитата:
     откуда простой человек, не работающий в Microsoft, может знать что она возвращает массив данных и что именно в каком элементе массива хранится?

    Она возвращает не массив, а число > 0 (при удачной обработке). А данные хранятся в структурах чий указатели должны быть переданы функции в качестве параметров.

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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
     
     
    Вод код примера работы этой функции:

    Код:
     
    Local $SectorsPerCluster
    Local $BytesPerSector
    Local $NumberOfFreeClusters
    Local $TotalNumberOfClusters
     
    $calldata=DllCall("Kernel32.dll","int","GetDiskFreeSpaceW", _
    "wstr", "C:\", _
    "dword*", $SectorsPerCluster, _
    "dword*", $BytesPerSector, _
    "dword*", $NumberOfFreeClusters, _
    "dword*", $TotalNumberOfClusters)
     
    ; Данные возвращаются в виде массива, не изменяя значения передаваемых в функцию переменных
    $SectorsPerCluster = $calldata[2]
    $BytesPerSector = $calldata[3]
    $NumberOfFreeClusters = $calldata[4]
    $TotalNumberOfClusters = $calldata[5]
     
    MsgBox (0, "", "Всего кластеров: " & $TotalNumberOfClusters & @CR & _
    "Количество свободных кластеров: " & $NumberOfFreeClusters & @CR & _
    "Количество байт в одном секторе: " & $BytesPerSector & @CR & _
    "Количество секторов в одном кластере: " & $SectorsPerCluster & @CR & @CR & _
    "Итого: " & @CR & @CR & _
    "Количество байт в одном кластере: " & $BytesPerSector * $SectorsPerCluster & @CR & _
    "Всего байт на диске С: " & $BytesPerSector * $SectorsPerCluster * $TotalNumberOfClusters & @CR & _
    "Свободно байт на диске С: " & $BytesPerSector * $SectorsPerCluster * $NumberOfFreeClusters)
     

     
    Здесь видно что переменные используются только для вызова функции и после окончания ее работы их значения не изменяются. А возвращается масив $calldata, а не просто число >0. Вот про него то я и говрю, как я могу догадаться что в его четвертом элементе ($calldata[4]) возвращается количество свободных кластеров?!
     
    Kar1son
    1) Подключиться к реестру удаленного компьютера и прочитать данные оттуда:
     
    Ключ "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName"
    Параметр "ComputerName"
    или
    Ключ "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"
    Параметр "Hostname"
     
    2) С помощью WMI:

    Код:
     
    $CompName = "192.168.3.4"             ; IP компьютера к которому подключаемся
    $UserName = "domain\Administrator"     ; имя пользователя от чьего имени подключаемся
    $Pass = "*****"                     ; пароль пользователя $UserName
     
    $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")    ; Устанавливаем перехватчик COM-ошибок
     
    $objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
    $objWMIService = $objSWbemLocator.ConnectServer($CompName, "root\CIMV2", $UserName, $Pass, "", "", 0)
    $colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
     
    If IsObj($colItems) Then
        For $objComputer In $colItems
            MsgBox (0, '', $objComputer.Name)
        Next
    EndIf
     
    Func MyErrFunc()
            Msgbox(0,"COM error","Возникла ошибка при работе с COM объектом !"      & @CRLF  & @CRLF & _
                 "err.description is: "    & @TAB & $oMyError.description    & @CRLF & _
                 "err.windescription:"     & @TAB & $oMyError.windescription & @CRLF & _
                 "err.number is: "         & @TAB & hex($oMyError.number,8)  & @CRLF & _
                 "err.lastdllerror is: "   & @TAB & $oMyError.lastdllerror   & @CRLF & _
                 "err.scriptline is: "     & @TAB & $oMyError.scriptline     & @CRLF & _
                 "err.source is: "         & @TAB & $oMyError.source         & @CRLF & _
                 "err.helpfile is: "       & @TAB & $oMyError.helpfile       & @CRLF & _
                 "err.helpcontext is: "    & @TAB & $oMyError.helpcontext _
                )
    Endfunc
     

     
    3) Читать и разбирать регулярно STDOUT:

    Код:
     
    #include <Constants.au3>
     
    Local $foo = Run(@ComSpec & " /c nslookup 192.168.3.4", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    While 1
        $line = StdoutRead($foo)
        If @error Then ExitLoop
        MsgBox(0, "STDOUT read:", $line)
    Wend
     
    While 1
        $line = StderrRead($foo)
        If @error Then ExitLoop
        MsgBox(0, "STDERR read:", $line)
    Wend
     
    MsgBox(0, "Debug", "Exiting...")
     

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Lovec 18:00 02-08-2010
    Цитата:
    возвращается масив $calldata

    Ну об этом написано в справке по AutoIt:
     

    Цитата:
    If the function call fails then @error is set to 1. Otherwise an array is returned that contains the function return value and a copy of all the parameters (including parameters that the function may have modified when passed by reference).
     

     
    И вообще это не совсем правильное использование функции:
     

    Код:
    #Include <WinAPI.au3>
     
    $tSectorsPerCluster = DllStructCreate("int64")
    $tBytesPerSector = DllStructCreate("int64")
    $tNumberOfFreeClusters = DllStructCreate("int64")
    $tTotalNumberOfClusters = DllStructCreate("int64")
     
    $calldata = DllCall("Kernel32.dll", "int", "GetDiskFreeSpaceW", _
            "wstr", "C:\", _
            "ptr", DllStructGetPtr($tSectorsPerCluster), _
            "ptr", DllStructGetPtr($tBytesPerSector), _
            "ptr", DllStructGetPtr($tNumberOfFreeClusters), _
            "ptr", DllStructGetPtr($tTotalNumberOfClusters))
     
    If Not $calldata[0] Then
        MsgBox(48, 'Error', 'Failed: ' & _WinAPI_GetLastErrorMessage())
        Exit
    EndIf
     
    $SectorsPerCluster = DllStructGetData($tSectorsPerCluster, 1)
    $BytesPerSector = DllStructGetData($tBytesPerSector, 1)
    $NumberOfFreeClusters = DllStructGetData($tNumberOfFreeClusters, 1)
    $TotalNumberOfClusters = DllStructGetData($tTotalNumberOfClusters, 1)
     
    MsgBox(0, "", "Всего кластеров: " & $TotalNumberOfClusters & @CR & _
            "Количество свободных кластеров: " & $NumberOfFreeClusters & @CR & _
            "Количество байт в одном секторе: " & $BytesPerSector & @CR & _
            "Количество секторов в одном кластере: " & $SectorsPerCluster & @CR & @CR & _
            "Итого: " & @CR & @CR & _
            "Количество байт в одном кластере: " & $BytesPerSector * $SectorsPerCluster & @CR & _
            "Всего байт на диске С: " & $BytesPerSector * $SectorsPerCluster * $TotalNumberOfClusters & @CR & _
            "Свободно байт на диске С: " & $BytesPerSector * $SectorsPerCluster * $NumberOfFreeClusters)

     
    Добавлено:
    Lovec 18:00 02-08-2010
    Цитата:
    возвращается масив $calldata, а не просто число >0.

    В $calldata[0] возвращается именно это (результат успешности).
     
    Добавлено:
    Кстати, эта функция не справится со значениями больше 2 gb, нужно использовать GetDiskFreeSpaceEx:
     

    Код:
    Func _WinAPI_GetDiskFreeSpaceEx($sDrive)
        Local $tFreeBytesAvailable = DllStructCreate('int64')
        Local $tTotalNumberOfBytes = DllStructCreate('int64')
        Local $tTotalNumberOfFreeBytes = DllStructCreate('int64')
        Local $Ret = DllCall('kernel32.dll', 'int', 'GetDiskFreeSpaceEx', 'str', $sDrive, 'ptr', DllStructGetPtr($tFreeBytesAvailable), 'ptr', DllStructGetPtr($tTotalNumberOfBytes), 'ptr', DllStructGetPtr($tTotalNumberOfFreeBytes))
     
        If (@error) Or (Not $Ret[0]) Then
            Return SetError(1, 0, 0)
        EndIf
     
        Local $Result[3]
     
        $Result[0] = DllStructGetData($tFreeBytesAvailable, 1)
        $Result[1] = DllStructGetData($tTotalNumberOfBytes, 1)
        $Result[2] = DllStructGetData($tTotalNumberOfFreeBytes, 1)
     
        Return $Result
    EndFunc

     
    это функция взята из библиотеки WinAPIEx.au3.

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

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



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

    Цитата:
    Кстати, эта функция не справится со значениями больше 2 gb, нужно использовать GetDiskFreeSpaceEx

    С этим не согласен. Ведь на своем компе пробовал прежде чем писать. И на диске С:\ места поболее 2ГБ (в том числе и свободного).

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Lovec 18:45 02-08-2010
    Цитата:
    С этим не согласен

    Это не я придумал , так утверждает MSDN:
     

    Цитата:
    The GetDiskFreeSpace function cannot report volume sizes that are greater than 2 gigabytes (GB). To ensure that your application works with large capacity hard drives, use the GetDiskFreeSpaceEx function.


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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Можно как нибудь в функцию поиска файлов добавить тригер - "поиск файлов только в корневом каталоге"? Как разновидность функции. Чтобы всю конструкцию обработаки файлов между While - WEnd не переписывать ещё в отдельную функцию.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 20:00 02-08-2010
    Sergey_Demchuk



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Как правильно присвоить переменной строку
    sldb.ExecSQL('insert into test2 (domain,subdomain,key,value) values("'+'fff'+'","'+'fffffff'+'","'+'eer'+'","'+'eerr'+'")')
     
    Надо наверное по коду вводить символы кавычек?

    Всего записей: 3551 | Зарегистр. 16-12-2002 | Отправлено: 02:22 03-08-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec
    Спасибо! я для себя уже сделал по третьему примеру но с использованием утилитки psexec(удаленный запуск команд) :
    Run('psexec \\'& $IP &' hostname', '', @SW_HIDE, $STDOUT_CHILD)
     
    nslookup не подходит потому что в ДНС на один ИП адрес несколько имен хостов и он возвращает их по очереди(первый запуск - имя1, второй запуск - имя2, потом снова имя 1 и тд)

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:11 03-08-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sergey_Demchuk
    Зависит от того, в какие кавычки заключаешь строку.  
    Если в одинарные, то все двойные содержащиеся в самой строке можешь смело оставлять так как есть, а все одинарные дублировать. Аналогично с двойными кавычками. Если строку обрамляют двойные кавычки, то все одинарные в самое строке оставляешь как есть, а все двойные дублируешь.

    Код:
    $str = 'sldb.ExecSQL(''insert into test2 (domain,subdomain,key,value) values("''+''fff''+''","''+''fffffff''+''","''+''eer''+''","''+''eerr''+''")'')'
    $str = "sldb.ExecSQL('insert into test2 (domain,subdomain,key,value) values(""'+'fff'+'"",""'+'fffffff'+'"",""'+'eer'+'"",""'+'eerr'+'"")')"

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 11:16 03-08-2010 | Исправлено: Kastermight, 22:51 04-08-2010
    Kar1son

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

    Код:
    $CompName = "192.168.3.4"             ; IP компьютера к которому подключаемся  
    $UserName = "domain\Administrator"     ; имя пользователя от чьего имени подключаемся  
    $Pass = "*****"                     ; пароль пользователя $UserName  
     
    $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")    ; Устанавливаем перехватчик COM-ошибок  
     
    $objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")  
    $objWMIService = $objSWbemLocator.ConnectServer($CompName, "root\CIMV2", $UserName, $Pass, "", "", 0)  
    $colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")  
     
    If IsObj($colItems) Then  
        For $objComputer In $colItems  
            MsgBox (0, '', $objComputer.Name)  
        Next  
    EndIf  
     
    Func MyErrFunc()  
            Msgbox(0,"COM error","Возникла ошибка при работе с COM объектом !"      & @CRLF  & @CRLF & _  
                 "err.description is: "    & @TAB & $oMyError.description    & @CRLF & _  
                 "err.windescription:"     & @TAB & $oMyError.windescription & @CRLF & _  
                 "err.number is: "         & @TAB & hex($oMyError.number,8)  & @CRLF & _  
                 "err.lastdllerror is: "   & @TAB & $oMyError.lastdllerror   & @CRLF & _  
                 "err.scriptline is: "     & @TAB & $oMyError.scriptline     & @CRLF & _  
                 "err.source is: "         & @TAB & $oMyError.source         & @CRLF & _  
                 "err.helpfile is: "       & @TAB & $oMyError.helpfile       & @CRLF & _  
                 "err.helpcontext is: "    & @TAB & $oMyError.helpcontext _  
                )  
    Endfunc

     
     
    этот способ попробовал - работает, но... я проверяю всю свою подсеть, там оказывается пара серверов на которых у меня нет прав и скрипт останавливается с ошибкойв этом месте

    Код:
    $objWMIService = $objSWbemLocator.ConnectServer($CompName, "root\CIMV2", $UserName, $Pass, "", "", 0)  

    что действие с этим обектом не возможно(Failed), можно как-то это побороть?
     
     
    Добавлено позднее...
    похоже проблема не в этом, я этот код в цикл запихнул, при втором проходе выходит ошибка...

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 12:10 03-08-2010 | Исправлено: Kar1son, 12:49 03-08-2010
    Lovec



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

    Цитата:
    там оказывается пара серверов на которых у меня нет прав

    Без прав доступа через WMI не получится. Ищи другие варианты.

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec
    не в этом вопрос, пусть бы те машины на которых нет прав просто пропустились а остальные бы отработали, но скрипт их не пропускает а с ошибкой падает...

    Код:
    $UserName = "Dom\User" ; имя пользователя от чьего имени подключаемся
        $Pass = "pass" ; пароль пользователя $UserName
     
        $oMyError=ObjEvent("AutoIt.Error", "MyErrFunc") ; Устанавливаем перехватчик COM-ошибок
     
    For $i = 0 To UBound($arr) - 1
        $CompName = $arr[$i] ; IP компьютера к которому подключаемся
        ConsoleWrite($arr[$i] & @CRLF)
     
        $objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
        $objWMIService = $objSWbemLocator.ConnectServer($CompName, "root\CIMV2", $UserName, $Pass, "", "", 0)
        If IsObj($oMyError) And StringInStr($oMyError.description,'Отказано') Then ContinueLoop
           $colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
     
        If IsObj($colItems) Then
            For $objComputer In $colItems
                MsgBox(0, '', $objComputer.Name)
            Next
        EndIf
    Next
     
    Func MyErrFunc()
    EndFunc   ;==>MyErrFunc

     
    $arr - массив IP адресов
     
    падает в строке:
    $colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
    Error in Expression

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 12:58 03-08-2010 | Исправлено: Kar1son, 13:02 03-08-2010
    Lovec



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

    Цитата:
    падает в строке:
    $colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")  

    Это значит что скрипт доходит до этой строки при ошибке, а не должен. Значит твое условие

    Код:
    If IsObj($oMyError) And StringInStr($oMyError.description,'Отказано') Then ContinueLoop

    не отлавливает ошибку, значит меняй его. Например, на более простое

    Код:
    If @error Then ContinueLoop

    И тогда все работает

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TextReplace - поиск и замена текста. Добавлено замена по сценарию, ресайз окна.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 15:19 03-08-2010 | Исправлено: AZJIO, 23:45 02-09-2010
    Sergey_Demchuk



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

    Цитата:
    [/q]Kastermight
    [q]Зависит от того, в какие кавычки заключаешь строку.  
    Если в одинарные, то все двойные содержащиеся в самой строке можешь смело оставлять так как есть, а все одинарные дублировать. Аналогично с двойными кавычками. Если строку обрамляют двойные кавычки, то все одинарные в самое строке оставляешь как есть, а все двойные дублируешь.  
     
    Код:$str = 'sldb.ExecSQL(''insert into test2 (domain,subdomain,key,value) values("''+''fff''+'","'+''fffffff''+''","''+''eer''+''","''+''eerr''+''")'')'  
    $str = "sldb.ExecSQL('insert into test2 (domain,subdomain,key,value) values(""'+'fff'+'"",""'+'fffffff'+'","'+'eer'+'"",""'+'eerr'+'"")')"

     
     
    Видимо не все так, ибо при компиляции выдает ошибку
    ERROR: syntax error
    $str = "sldb.ExecSQL('insert into test2 (domain,subdomain,key,value) values(""'+'fff'+'"",""'+'fffffff'+'",
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    I:\INSTALL\Delphi\Sqlite\SQLite_files\Example\filds.au3 - 1 error(s), 0 warning(s)
     
    Хотя вообщем то разобрался дальше, идея правильная оказалась

    Всего записей: 3551 | Зарегистр. 16-12-2002 | Отправлено: 15:32 03-08-2010 | Исправлено: Sergey_Demchuk, 15:59 03-08-2010
    Kar1son

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

    Вариант с WMI почему-то в цикле не всегда дает результат... тоесть я запускаю этот цикл и вижу что некоторые адреса не определяются, беру вариант без цикла, с опросом одной машины(которая только что не ответила) и результат есть... не могу понять в чем дело...
     
    Попробовал вернуться к варианту с просмотром результата работы утилитки которая определяет имя. и опять ерунда какая-то... так же ответов иногда нет от машин, а тут же в ручную проверяю - отвечает. И вообще еще ни разу не доработала до конца, проходит от 5 до 80 циклов и все замирает насмерть

    Код:
    #include <Constants.au3>
    ;~ Sleep(1000 * 60 * 60 * 8)
    $hFile = FileOpen('Who.txt', 2)
    Dim $Names[256][2]
    For $i = 0 To 255
        If Ping('150.18.50.' & $i) Then
            $Names[$i][0] = '150.18.50.' & $i
            FileWrite($hFile, '150.18.50.' & $i)
            ConsoleWrite('150.18.50.' & $i )
            $sLog = ''
            $hRun = Run(@ScriptDir & '\psexec.exe \\150.18.50.' & $i & ' hostname', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
            While 1
                $sLog &= StdoutRead($hRun)
                If @error Then ExitLoop
            WEnd
            If $sLog <> '' Then
                FileWrite($hFile, ' - ' & $sLog )
                ConsoleWrite(' - ' & $sLog )
            Else
                FileWrite($hFile, ' - нет ответа' & @CRLF)
                ConsoleWrite(' - нет ответа' & @CRLF)
            EndIf
            If ProcessExists($hRun) Then ProcessWaitClose ($hRun)
        EndIf
    Next
    FileClose($hFile)


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



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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec
    дело не в сети оказалось, скрипт виснет, а когда откомпилировал, запустил екзкшник и все отработало на ура

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 17:28 03-08-2010
    Kastermight



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sergey_Demchuk
    да. ошибся чуток. уж очень много кавычек просто
    исправил. но ты верно подметил - это правило действительно работает

    Всего записей: 23 | Зарегистр. 02-03-2009 | Отправлено: 20:26 03-08-2010 | Исправлено: Kastermight, 17:59 04-08-2010
    Lovec



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

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 15:52 05-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