Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: ViSiToR
Дата сообщения: 02.08.2010 16:17
Lovec 16:18 02-08-2010
Цитата:
откуда простой человек, не работающий в Microsoft, может знать что она возвращает массив данных и что именно в каком элементе массива хранится?

Она возвращает не массив, а число > 0 (при удачной обработке). А данные хранятся в структурах чий указатели должны быть переданы функции в качестве параметров.
Автор: Lovec
Дата сообщения: 02.08.2010 17:00
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)
Автор: ViSiToR
Дата сообщения: 02.08.2010 17:29
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
Дата сообщения: 02.08.2010 17:45
ViSiToR
Ок. Спасибо.

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

С этим не согласен. Ведь на своем компе пробовал прежде чем писать. И на диске С:\ места поболее 2ГБ (в том числе и свободного).
Автор: ViSiToR
Дата сообщения: 02.08.2010 17:57
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.
Автор: AZJIO
Дата сообщения: 02.08.2010 19:00
NIKZZZZ
Можно как нибудь в функцию поиска файлов добавить тригер - "поиск файлов только в корневом каталоге"? Как разновидность функции. Чтобы всю конструкцию обработаки файлов между While - WEnd не переписывать ещё в отдельную функцию.
Автор: Sergey_Demchuk
Дата сообщения: 03.08.2010 01:22
Как правильно присвоить переменной строку
sldb.ExecSQL('insert into test2 (domain,subdomain,key,value) values("'+'fff'+'","'+'fffffff'+'","'+'eer'+'","'+'eerr'+'")')

Надо наверное по коду вводить символы кавычек?
Автор: Kar1son
Дата сообщения: 03.08.2010 08:11
Lovec
Спасибо! я для себя уже сделал по третьему примеру но с использованием утилитки psexec(удаленный запуск команд) :
Run('psexec \\'& $IP &' hostname', '', @SW_HIDE, $STDOUT_CHILD)

nslookup не подходит потому что в ДНС на один ИП адрес несколько имен хостов и он возвращает их по очереди(первый запуск - имя1, второй запуск - имя2, потом снова имя 1 и тд)
Автор: Kastermight
Дата сообщения: 03.08.2010 10:16
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'+'"")')"
Автор: Kar1son
Дата сообщения: 03.08.2010 11:10
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
Автор: Lovec
Дата сообщения: 03.08.2010 11:51
Kar1son

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

Без прав доступа через WMI не получится. Ищи другие варианты.
Автор: Kar1son
Дата сообщения: 03.08.2010 11:58
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
Автор: Lovec
Дата сообщения: 03.08.2010 13:16

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

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

Код: If IsObj($oMyError) And StringInStr($oMyError.description,'Отказано') Then ContinueLoop
Автор: Widok
Дата сообщения: 01.06.2010 12:07
Часть 1, Часть 2



AutoIt 3

Домашняя страница
Страница загрузки
Русское сообщество AutoIt


Описание:

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


[more=Справки]
AutoIt в Википедии


[b]Справочные материалы


Новая справка на русском, зеркало (8 Мб) для v3.3.8.1 от активных пользователей, обсуждается на OSzone
Справка на русском (v3.2.5.4 от Иванова) и по этой же ссылке есть справки на других языках
Видео-уроки на youtube от пользователя AutoIt Guide RUS

AutoIt Script : Введение
Урок 1: Скрипт HelloWorld
Урок 2: Автоматизация Notepad
Урок 3: Переменные, Массивы
Урок 4: Условные выражения
Урок 5: Циклы
Урок 6: Функции
Урок 7: Работа с файлами

Collection16.zip (11 Мб) или страница закачки на script-coding.com



Справка общего характера

Стили окон, ещё, ещё
Стили элементов управления
Справочник по командам rundll32



WinAPI

w32api - Справочник по Windows API, (веб-страничка).
WinAPI по-русски - БОЛЬШОЙ справочник, (веб-страничка).
Справочник по функциям Windows API, (веб-страничка).
Справочник по функциям Windows API, (веб-страничка).
Справочник по функциям Windows API, (веб-страничка).
WM Сообщения, (веб-страничка).

API-Guide 3.7 Справочник 925 функций, англ. яз. в виде программы EXE, русификатор
API-Viewer 2004, англ. яз. в виде программы EXE, русификатор
Справочнник по функциям Windows API от Дэниэла Эпплмана , англ. яз.
Сайт Владимира Соковикова
Win32API_First_Steps.zip (2 Мб) или страница закачки на script-coding.com
WinAPI (32) (3 Мб)
Справка WinAPI (Win 32 API по шагам)
WinAPI тот же выше указанный ресурс
Русский справочник по API-функциям
Недокументированные функиии Windows API, Синтаксис C (не VB!)



Помощь по регулярным выражениям

Учимся регулярно выражаться
Книга от Дж. Фридл - Регулярные выражения. Библиотека программиста [издание первое], [издание второе], [издание третье].
Ресурс, посвящённый регулярным выражениям.
Regular Expression Library - Online библиотека регулярных выражений
edlinsoft.blogspot.com - доступное пониманию описание конструкций
valera.asf.ru - доступное пониманию описание конструкций
msdn.microsoft.com - справочник по метасимволам
wiki - управляющие символы



Англоязычные учебники

Учебник по AutoIt для начинающих (англ. яз., pdf)
Видео-руководства на YouTube (англ. яз.)
AutoIt v3: Your Quick Guide (652 КБ) - Ваш быстрый гид в мир AutoIt-а (pdf)
Tutorial on DllCall() & DllStructs - Небольшое (пока?) руководство по использованию функции DllCall*()[/more][/b]
[more=Инструменты]
[b]Основные инструменты


SciTE4AutoIt3 (4.7 Мб) (Страница загрузки) - комплект содержит в себе следующие инструменты:
Koda (724 Kb) - Создание внешнего интерфейса GUI (окно с элементами управления).
Form Builder (Ссылка в конце первого поста темы) - Создание внешнего интерфейса GUI.
AutoIt3Wrapper (документация) - для компиляции скрипта с дополнительными возможностями (добавление значка, описания и т.п).
Obfuscator (документация) - делает неудобочитаемым AutoIt-код, удаляет комментарии и неиспользуемые функции.
CodeWizard (400 Kb) - Создаёт некоторые элементы интерфейса.
AutoItMacroGenerator (34 Kb) - Записывает в реальном времени действия пользователя в AutoIt-код.
Tidy (документация) - делает скрипт читабельным
SciTEConfig - позволяет настроить цветовое оформление и шрифты SciTE.

Дополнительные инструменты

SciTE-Ru - русский проект скайта.
RegToScript - конвертирование reg-файлов в скрипт. Автор NIKZZZZ.
RegExp - для теста регулярных выражений. страничка
Au3PP - Project Manager - программа для оптимизации скрипта, удаление комментариев, табов и пробелов в начале и в конце строки, добавление в скрипт функций вызываемых из Include. Но не всегда корректно отрабатывает. Автор kjactive.
Dependency Walker 2.2 - (0.6Мб, En) показывает задействованные программой DLL и задействованные в ней вызовы функций. пример использования
DLL Export Viewer v1.41 - (60кб, Ru) показывает имена функций в выбранном DLL.

AutoIt Path Switcher - Переключение пути к папке AutoIt.
ScriptWriter (78 Kb) - Аналог AutoItMacroGenerator.
API Constants (817 Kb) - Утилита для просмотра констант API-функции.
AutoIt-меню для браузера Opera.
[/more][/b]
[more=Ресурсы, посвящённые AutoIt]
[b]Ресурсы, посвящённые AutoIt


autoitscript.com - Официальный англоязычный форум
AutoIt Russian Community - Русское сообщество AutoIt
Раздел в конференции OSzone.net, посвящённый AutoIt
Раздел в конференции Серый форум, посвящённый AutoIt
Jabber-конференция для обсуждения мелких вопросов касающихся AutoIt
Обзор скриптового языка AutoIt (рус.)
AutoIt на Yahoo! Groups (En)
Пополняющийся со временем сайт с полезными утилитами и функциями на AutoIt
Коллекция AutoIt-скриптов от Sanja Alone
Коллекция AutoIt-скриптов от MSFN (могут быть устаревшие).
Коллекция AutoIt-скриптов от AZJIO
[/more][/b]
[more=Полезные советы новичкам и не только]
[b]Полезные советы новичкам и не только


1. «Если для вас понятно то, что вы пишете, это ещё не значит, что и остальным оно будет также очевидно!»

2. «Не всегда выставление полных примеров помогает тому, кто спрашивает... Если бы за меня вот так всегда всё делали, когда я начинал (показывали всё примерами, а не указывали на нужное направление), то вряд ли я бы развивался в изучении AutoIt'а»

3. Помимо тега code, используйте тег more для больших кусков кода. Так легче читать сообщения, это поможет не отпугнуть тех, кто всё же решится вам помочь .

4. Размещая вопрос, желательно при этом выкладывать код проблемного участка вашего скрипта.

5. Старайтесь предоставить как можно больше деталей касательно вашей проблемы (но не преувеличивая), гадать ещё никто не научился.

6. Старайтесь не выкладывать один и тот же пример в модифицированном виде, лучше всего поправьте своё первоначальное сообщение и сообщите об этом остальным в новом. Но если всё же модификация заслуживает отдельного, нового поста (например, если хочется сохранить и предыдущую версию примера), и в ней многие функции повторяются (не изменённые), то лучше их не выкладывать, а просто указать на предыдущую версию примера. Таким образом, не пострадает общение на форуме, качество сообщений и читабельность форума в целом .

7. Если у вас много времени, и так случилось, что вы пишете сообщение довольно долго (полчаса, скажем), то перед его отправкой лучше обновите страницу (на другом/й окне/вкладке), так как, возможно, на ваш вопрос уже дали ответ или (если вы пытаетесь помочь другим) похожее на ваше решение уже предоставили, поэтому незачем плодить одни и те же решения/примеры, это затруднит в будущем поиск и нахождение действительно важного решения/ответа.

8. Ну и, как (должно быть) известно, прежде чем что-либо спрашивать в этой (да и не только) ветке, используйте поиск, в нашем случае это:

По здешнему форуму
По официальному форуму
По форуму AutoIt на OSzone - содержит огромное количество материалов на тему AutoIt.


Рекомендации по написанию скриптов

В Autoit существует только один тип данных - Variant , поэтому для удобства написания скриптов рекомендуется использовать следующие имена переменных:

Первый набор символов после знака доллара ($) должен определять тип данных. Следующий список определяет префиксы и типы данных, используемых с ними:


$a<символ> - (Array) Массив данных - последующий символ, взятый из списка ниже, определяет тип данных в массиве
$b - (Binary data) Двоичные данные
$h - (File or window handle) Дескриптор файла, окна и т.д.
$i - (Integer) Целое число
$f - (Boolean) Логический тип, может принимать значения True или False
$n - (Floating point number) Число с плавающей точкой
$s - (String) Строка
$v - (Variant) Вариант, неопределенный тип данных, базовый тип для Autoit
$t - (Struct) Структура в стиле C/C++, для использования в DllCall, в сообщениях WM_*, при обработке данных и т.п.
$p - (Pointer) Указатель на структуру или на её элемент


Остальное имя переменной следует начинать с заглавной буквы, и оно должно отражать функциональность (свойства) переменной. Имена вроде “$iC” неприемлемы.
"$aiWeekDayNames" или "$iCounter" намного предпочтительнее.

Переведено с «User Defined Functions Standards».

P.S
От себя...
Такая манера написания скриптов уже стала почти стандартом среди AutoIt-кодеров, оно придаёт коду более читабельный и приятный вид.
[/more][/b]
[more=Готовые решения]
[b]Examples.7z
- архив ниже приведённых скриптов.

Готовые скрипты и программы с открытым кодом на AutoIt

Desktop Icons Restorator - Скрипт-программа для сохранения/восстановления позиции значков рабочего стола.
CaptureIt - Утилита для захвата изображений с экрана.
SwitchIt - Скрипт для конвертирования выделенного текста.

Общие вопросы и решения на Autoit

Обработчик скриптов добавляющий отладчик (debugger) - Последняя версия: AutoItScript Add Debugger
Интеракция между несколькими скриптами
Пример использование интеракции между скриптами - Добавление элементов GUI с внешнего модуля
Чтение и запись данных с/в окна/о SciTE
Пример автообновления версии своего приложения
Копирование большого файла с отображением данных прогресса
Создание динамического меню в Tray Icon (значок в области уведомлений)
Пример создания своего мастера (Wizard)
Метод, позволяющий запускать код VBS без создания временных файлов
Описание функции GUIRegisterMsg()
Пример перехвата вводимых символов с клавиатуры
Пример деактивирования TabItem
Пример вывода лога в Edit-поле (с поддержкой форматирования текста)
Пример остановки/начало выполнения скрипта + Слежение за буфером обмена с заменой неподдерживаемых в имени файла символов
Подключение приложения (GUI) к буферу обмена
Пример использования меню с значками (ModernMenu.au3) -> Список программ в меню значка в системном трее
Пример подсчёта интервала времени между нажатиями клавиш
Слежение нажатых элементов в текущем окне (под курсором)
Написание instant messaging Бота на AutoIt
Способ, позволяющий посылать нажатие клавиши в неактивное окно (не путать со свёрнутым)
Сервер <=> Клиент - Пример передачи файла
Пример отображения только элементов GUI (без самой оболочки)
Модуль, превращающий ваше приложение в Trial-версию
Слежение за выделенным текстом и с последующим его помещением в файл


Отдельные функции и библиотеки (UDF):

Функции, относящиеся к интернету

_FTP_DirsListToArray - Функция получения списка каталогов (включая подкаталоги) на FTP
Функция для отправки электронной почты (email) с поддержкой Html и вложений файлов
Функции и пример для отображения детального процесса закачки файла
Функции отключения/подключения к интернету
Функция проверки подключения к интернету
_SocketToIP - Получение IP по подключённому сокету:

Код: ; Function to return IP Address from a connected socket.
;вызов функции через "Dim $szIP_Accepted = SocketToIP($ConnectedSocket)"
Func _SocketToIP($iSocket)
Local $stSockAddr = DllStructCreate("short;ushort;uint;char[8]")

Local $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $iSocket, _
"ptr", DllStructGetPtr($stSockAddr), "int_ptr", DllStructGetSize($stSockAddr))

If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($stSockAddr, 3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf

Return $aRet
EndFunc
Автор: ViSiToR
Дата сообщения: 01.06.2010 14:53
Всех с переездом!
Автор: NIKZZZZ
Дата сообщения: 01.06.2010 14:59
ViSiToR
По поводу Ссылка
Кроме этого, надо исправить удаление отладочных строк
[more]--------------------------------------------------------------------------------
-- ConsoleWritePattern(with_comment)
--
-- Returns the pattern used to find DebugConsoleWrite statements. This must be
-- a function so NewLineInUse() can be called on the correct document.
--
-- Paramters:
--    with_comment - If true, returns the pattern with a leading comment.
--
-- Returns:
--    The pattern used to find DebugConsoleWrite statements.
--------------------------------------------------------------------------------
function AutoItTools:ConsoleWritePattern(with_comment)
    local nl = self:NewLineInUse()
    if with_comment then
        return nl .. "[%s]*;[%s]*(SetError%([^" .. nl .. "]-%) ;### Debug[^" .. nl .. "]+)"
    else
        return nl .. "[%s]*(SetError%([^" .. nl .. "]-%) ;### Debug[^" .. nl .. "]+)"
    end
end    -- ConsoleWritePattern()

--------------------------------------------------------------------------------
-- MsgBoxPattern(with_comment)
--
-- Returns the pattern used to find DebugMsgBox statements. This must be
-- a function so NewLineInUse() can be called on the correct document.
--
-- Paramters:
--    with_comment - If true, returns the pattern with a leading comment.
--
-- Returns:
--    The pattern used to find DebugMsgBox statements.
--------------------------------------------------------------------------------
function AutoItTools:MsgBoxPattern(with_comment)
    local nl = self:NewLineInUse()
    if with_comment then
        return nl .. "[%s]*;[%s]*(SetError%([^" .. nl .. "]-%) ;### Debug[^" .. nl .. "]+)"
    else
        return nl .. "[%s]*(SetError%([^" .. nl .. "]-%) ;### Debug[^" .. nl .. "]+)"
    end
end    -- MsgBoxPattern()

--------------------------------------------------------------------------------
[/more]
Автор: ViSiToR
Дата сообщения: 01.06.2010 15:26
NIKZZZZ 15:59 01-06-2010
Цитата:
Кроме этого, надо исправить удаление отладочных строк

В этом случае можно не дублировать функции:


Код: [no]function AutoItTools:ConsoleWritePattern(with_comment)
    return self:MsgBoxPattern(with_comment)
end    -- ConsoleWritePattern()

function AutoItTools:MsgBoxPattern(with_comment)
    local nl = self:NewLineInUse()
    if with_comment then
        return nl .. "[%s]*;[%s]*(SetError%([^" .. nl .. "]-%) ;### Debug[^" .. nl .. "]+)"
    else
        return nl .. "[%s]*(SetError%([^" .. nl .. "]-%) ;### Debug[^" .. nl .. "]+)"
    end
end    -- MsgBoxPattern()[/no]
Автор: degid
Дата сообщения: 02.06.2010 17:16
Есть скрипт на vbscript, меняет рабочую группу, тут нашел пример всовывания vbscript в AutoIT, но он чет вылетает на с ошибкой
Исходный скрипт:

Код:
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144

strDomain = "NewGr"

Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")
ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain)
Автор: Kar1son
Дата сообщения: 02.06.2010 18:02
degid
если внутри строки у тебя есть кавычки " то саму строку надо заключать в апострофы ' и наоборот.

Зы хотел написать готовую но запутался в твоей строке
Автор: ViSiToR
Дата сообщения: 02.06.2010 20:33
degid 18:16 02-06-2010
Цитата:
Есть скрипт на vbscript, меняет рабочую группу, тут нашел пример всовывания vbscript в AutoIT, но он чет вылетает на с ошибкой

А зачем выполнять vbs из AutoIt, это не тот случай , вот тот же скрипт но переведён на AutoIt (не тестировал):


Код: Const $JOIN_DOMAIN = 1
Const $ACCT_CREATE = 2
Const $ACCT_DELETE = 4
Const $WIN9X_UPGRADE = 16
Const $DOMAIN_JOIN_IF_JOINED = 32
Const $JOIN_UNSECURE = 64
Const $MACHINE_PASSWORD_PASSED = 128
Const $DEFERRED_SPN_SET = 256
Const $INSTALL_INVOCATION = 262144

$strDomain = "NewGr"

$objNetwork = ObjCreate("WScript.Network")
$strComputer = $objNetwork.ComputerName
$objComputer = ObjGet("winmgmts:{impersonationLevel=Impersonate}!\\" & $strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & $strComputer & "'")
$ReturnValue = $objComputer.JoinDomainOrWorkGroup($strDomain)
Автор: Kar1son
Дата сообщения: 03.06.2010 00:12
ViSiToR
а откуда ты узнаешь об обектах? например в ObjCreate("WScript.Network"), ты откуда узнал что есть такой объект "WScript.Network"?
Автор: ViSiToR
Дата сообщения: 03.06.2010 01:09
Kar1son 01:12 03-06-2010
Цитата:
откуда ты узнаешь об обектах? например в ObjCreate("WScript.Network"), ты откуда узнал что есть такой объект "WScript.Network"?

Это из скрипта от degid

А вообще есть такой инструмент как Scriptomatic, там можно много чего узнать об объектах (работа с WMI), ну и конечно же разные справки по теме WSH.
Автор: Kar1son
Дата сообщения: 03.06.2010 13:05
есть команда Send('Kar1son{Enter}'), а если в момент выполнения язык в системе переключен на русский то получается "Лфк1ыщт". Есть способы кроме как посылать через Send ASCII коды символов?
Автор: degid
Дата сообщения: 03.06.2010 13:21
Kar1son, ViSiToR
разобрался, всё дело в кавычках... (там просто сразу " и ' используются, записал $Code в файлик и всё увидел)

Код: $Code &= "Set objComputer = GetObject(" & """winmgmts:{impersonationLevel=Impersonate}!\\""" & " & _" & @LF
$Code &= "strComputer & " & """\root\cimv2:Win32_ComputerSystem.Name='""" & " & _" & @LF
$Code &= "strComputer & " & """'""" & ")" & @LF
Автор: NIKZZZZ
Дата сообщения: 03.06.2010 13:29
degid

Цитата:
разобрался, всё дело в кавычках...

В таких случаях удобно использовать одиночные кавычки, например:

Код: $Code &= 'Set objComputer = GetObject(' & '"winmgmts:{impersonationLevel=Impersonate}!\\"' & ' & _' & @LF
Автор: degid
Дата сообщения: 03.06.2010 13:32

Цитата:
есть команда Send('Kar1son{Enter}'), а если в момент выполнения язык в системе переключен на русский то получается "Лфк1ыщт". Есть способы кроме как посылать через Send ASCII коды символов?

http://forum.ru-board.com/topic.cgi?forum=5&topic=17705&start=2620#15
Автор: ViSiToR
Дата сообщения: 03.06.2010 14:20
Kar1son 14:05 03-06-2010
Цитата:
Есть способы кроме как посылать через Send ASCII коды символов?

Обход проблемы с кодировкой при использовании Send

degid 14:21 03-06-2010
Цитата:
было бы прикольно его полностью переделать на AutoIt

Я привёл пример выше.
Автор: Z4masko
Дата сообщения: 03.06.2010 15:45
Подскажите как автоматизировать нажатия в Internet Explorer по элементам меню, которое написано на JavaScript?
То есть есть выпадающее меню на Javascript и справа кнопочка Ок например (то же относится к этому скрипту). И вот как бы указать через Auto It те элементы меню ,на которые надо кликать и потом нажимать ОК ?
С обычными ссылками понятно - можно просто делать: _IELinkClickByText
А вот как кликать когда все меню на JavaScript - непонятно (
Почитал мануал, там написано что при таких случаях надо кликать с помощью:

Код: _IEAction ($element, "click")
Автор: madmasles
Дата сообщения: 03.06.2010 16:25
Z4masko
Вы здесь посмотрите: Выбрать определенное значение из списка в окне, там для vkontakte есть готовое решение.
Автор: Kar1son
Дата сообщения: 03.06.2010 17:02
Z4masko
я когда пытался этой функцией пользоваться, сохранял страничку и потом в коде(блокнотом открывал просто) искал имя элемента

Страницы: 12345678910111213

Предыдущая тема: Проблемы с VMware Workstation (часть 4)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.