Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты

Закрытая тема
Настройки темы
[архив - Часть 2] AutoIt скрипты

(*.*)


Сообщения: 36548
Благодарности: 6692


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 27-01-2008
Внимание!
Тема переведена в архивное состояние







(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.


Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).
Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).



Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 05-02-2006

 

Ветеран


Сообщения: 825
Благодарности: 50

Профиль | Отправить PM | Цитировать


amel27,
Цитата amel27:
В NetBIOS нельзя ограничить широковещание одной карточкой. »
Насколько я знаю посылка широковещательного запроса посылка по полной маске последнего октета?.
Имею разные сетевые адреса на всех 4-х картах. Ну для примера пусть две карты имеют адреса 192.168.0.10 и 162.16.10.24.
WINS адресов в настройке карточек нет. Домены не используются пока!
Как мне узнать какой комп по какой сети я вижу.
Вообще нужно узнать какие станции имеют подключение к нескольким сегментам сразу.
Что можешь порекомендовать почитать по данной тематике.

Отправлено: 10:08, 25-10-2007 | #631



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Как можно перечитать содержимое папки в меню, но при этом поместив каталоги (подменю) в самый верх, а не как попало (по дате вроде бы сортируются)... а также требуется вернуть двумерный массив с контролями от создания пунктов меню (только пунктов, подменю не нужны), и с путями по порядку (пути только файлов, чтобы позже при нажатии на пункт файл можно было запустить)?

Вот рабочий пример для считывания установочной папки аутоита, но подменю не в начале (они присутствуют в той позиции, где были найдены в процессе поиска), а мне нужно именно в начале:

Код: Выделить весь код
#include <GuiConstants.au3>
Opt("GuiOnEventMode", 1)

$Gui = GuiCreate("Test")
GUISetOnEvent(-3, "Quit")

$Menu = GUICtrlCreateMenu("AutoIt")
$AutoItPath = StringRegExpReplace(@AutoItExe, '\\[^\\]+$', '')
Global $Elements = GetFolderToMenu($AutoItPath, $Menu)

GUISetState()

While 1
    Sleep(100)
WEnd

Func GetFolderToMenu($sPath, $hMenu)
    Local $RetArray[1][4], $SubDirsArr, $hSubMenu, $FindNextFile, $CurrentPath, $iUbound
    $sPath = StringRegExpReplace($sPath, '\\+$', '')

    Local $FindFirstFile = FileFindFirstFile($sPath & '\*.*')
    If @error = 1 Then Return SetError(1, 0, -1)

    While 1
        $FindNextFile = FileFindNextFile($FindFirstFile)
        If @error = 1 Then ExitLoop
        $CurrentPath = $sPath & "\" & $FindNextFile
        If StringInStr(FileGetAttrib($CurrentPath), 'D') And $FindNextFile <> "Include" And $FindNextFile <> "Examples" Then
            $hSubMenu = GUICtrlCreateMenu($FindNextFile, $hMenu)
            $SubDirsArr = GetFolderToMenu($CurrentPath, $hSubMenu)
            If IsArray($SubDirsArr) Then
                For $i = 1 To UBound($SubDirsArr)-1
                    If StringInStr(FileGetAttrib($SubDirsArr[$i][3]), 'D') Then
                        GUICtrlCreateMenu($SubDirsArr[$i][2], $SubDirsArr[$i][0])
                    Else
                        $iUbound = UBound($RetArray)
                        ReDim $RetArray[$iUbound+1][4]
                        $RetArray[$iUbound][1] = $SubDirsArr[$i][1]
                        $RetArray[$iUbound][2] = $SubDirsArr[$i][2]
                        $RetArray[$iUbound][3] = $SubDirsArr[$i][3]
                    EndIf
                Next
            EndIf
        ElseIf Not StringInStr(FileGetAttrib($CurrentPath), 'D') Then
            $iUbound = UBound($RetArray)
            ReDim $RetArray[$iUbound+1][4]
            $RetArray[$iUbound][0] = $hMenu
            $RetArray[$iUbound][1] = GUICtrlCreateMenuItem($FindNextFile, $hMenu)
            $RetArray[$iUbound][2] = $FindNextFile
            $RetArray[$iUbound][3] = $CurrentPath
            GUICtrlSetOnEvent(-1, "MenuItemEvents")
        EndIf
    WEnd
    FileClose($FindFirstFile)
    $RetArray[0][0] = UBound($RetArray)-1
    Return $RetArray
EndFunc

Func MenuItemEvents()
    For $i = 1 To $Elements[0][0]
        If $Elements[$i][1] = @GUI_CtrlId Then
            ShellExecute($Elements[$i][3])
            ExitLoop
        EndIf
    Next
EndFunc

Func Quit()
    Exit
EndFunc
Я пытался создавать сначала каталоги (подменю), а потом проходить полученный массив и создавать файлы, но у меня не получилось на первом этапе (создание каталогов) записать все пути чтобы потом по ним проходится в том же порядке и создавать соответственно пункты .

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 11:34, 25-10-2007 | #632


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: zip GetFolderToMenu.zip
(6.9 Kb, 24 просмотров)

- Получилось! см. скриншот:



Сам скрипт + библиотеку ModernMenu.au3 прикладываю вместе с постом (разукрашенного кода боее 22 тысяч строк!, а прикладывать библиотеку всё ровно нужно (не помню где брал, а искать лень ), так что пусть будут вместе в архиве ).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:22, 26-10-2007 | #633


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
интересно, а ограничения на размер меню какие?.. а то я натравил твой скрипт в корень диска C:\ и он мне выдал: ModernMenu.au3 (450) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

NikLok
Цитата:
Насколько я знаю посылка широковещательного запроса посылка по полной маске последнего октета »
тут видимо только во все сети, так как "тип узла" NetBIOS задается для хоста, а не карточки
Цитата:
Имею разные сетевые адреса на всех 4-х картах [...]
WINS адресов в настройке карточек нет. Домены не используются пока! »
ну, домен необязателен.... можно для каждой подсети определить свою группу, по которой затем и выбирать компы, хотя для многокарточных придется ограничиться только какой-то одной группой
Цитата:
Как мне узнать какой комп по какой сети я вижу.
Вообще нужно узнать какие станции имеют подключение к нескольким сегментам сразу. »
варианты:
- по имени (удаленно) через WMI "снять" конфигурацию сетевых интерфейсов;
- поднять WINS-сервер и брать с него занимаемые именем IP-адреса.
Цитата:
Что можешь порекомендовать почитать по данной тематике. »
для начала можно ТУТ (главы 8, 9)

Отправлено: 08:03, 26-10-2007 | #634


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: zip GetFolderToMenu.zip
(7.6 Kb, 22 просмотров)

amel27,
Цитата:
интересно, а ограничения на размер меню какие?
1000 (явно массив не возврастает, обьявлен на 1000), библиотека не моя , я сам только заметил, вот поправлены вариант, а также в примере исправлена ошибка с файлами ярлыков + меню Quick Launch + изменён фон меню (для увеличения скорости) + ещё несколько доработок

P.S
Библиотека переименована в Menu_With_Icons_Incl.au3 (её содержание также намного изменилось).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 08:28, 26-10-2007 | #635


Новый участник


Сообщения: 47
Благодарности: 1

Профиль | Отправить PM | Цитировать


Подскажите можно ли при заблокированной системе (win XP) симулировать клавиатурные нажатия?
При не заблокированной все нормально отрабатывается, а при заблокированной никак не хочет.
Вы уж прости если ламерский вопрос, но я только вчера сел знакомиться с AutoIt.
Вот сам код.
Код: Выделить весь код
WinWait("Генератор отчетов ")
WinActive("Генератор отчетов")
If @error=1 Then WinActivate("Генератор отчетов")
;Выбираем отчет
Send("{DOWN}")
Sleep(300)
Send("{DOWN}")
Sleep(300)
Send("{DOWN}")
Sleep(300)
Send("{RIGHT}")
Sleep(300)
Send("{DOWN}")
Sleep(300)
Send("{DOWN}")
Sleep(300)
Send("{DOWN}")
Sleep(300)
Send("{DOWN}")
Sleep(300)
Send("{DOWN}")
Sleep(300)
;Открыли отчет
Send("{ENTER}")
Сделал так (я про множественный send) потому что иногда не успевает обработаться переход и захватывается другой отчет, а так нормально.

А эти строчки по идее проверяют активно ли окно и если нет делают его активным Ну это по моим соображениям из того что я подчерпнул в справке.
WinActive("Генератор отчетов")
If @error=1 Then WinActivate("Генератор отчетов")

Сделано потому что при заблокированной системе
WinWaitActive("Генератор отчетов")
можно ждать до бесконечности.

По другому отчет выбрать не получается т.к. выбор идет из дерева (class TTreeView), а как я понял AutoIt не может сним работать.
Подскажите как можно это сделать?

Отправлено: 10:34, 26-10-2007 | #636


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Davlet,
Цитата:
можно ли при заблокированной системе (win XP) симулировать клавиатурные нажатия?
Из примера в справке исходит что вроде можно:

Код: Выделить весь код
If @OSVersion <> "WIN_98" And @OSVersion <> "WIN_ME" Then
    BlockInput(1)
EndIf

Run("notepad")
WinWaitActive("Untitled - Notepad")
Send("{F5}")  ;pastes time and date

BlockInput(0)
Цитата:
AutoIt не может сним работать
Ну почему, если нужно получить текст, то есть способы (а значит и кликнуть по определённому элементу полагаю тоже можно)...

Вот пример (должна быть установлена библиотека отсюда, если есть проблемы с установкой, решение есть тут) - Открывает “Диспетчер устройств”, переходит к 16-тому пункту, раскрывает его, и возвращает текст раскрытого подпункта:


Код: Выделить весь код
#include <A3LTreeView.au3>

ShellExecute("devmgmt.msc")
WinWait("[CLASS:MMCMainFrame]")

$hWnd = WinGetHandle("[CLASS:MMCMainFrame]")
$h_Item = ControlGetHandle($hWnd, "", "SysTreeView321")

ControlSend($hWnd, "", "SysTreeView321", "{Down 16} {Right 2}")
ControlFocus($hWnd, "", "SysTreeView321")

$GetText = _TreeView_GetText($h_Item, _TreeView_GetSelection($h_Item))

MsgBox(0, "", $GetText)

ControlFocus($hWnd, "", "SysTreeView321")
Sleep(1500)
WinClose($hWnd)

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 11:02, 26-10-2007 | #637


Новый участник


Сообщения: 47
Благодарности: 1

Профиль | Отправить PM | Цитировать


Creat0R

Получилось используя

ControlSend("Генератор отчетов", "", "[CLASS:TTreeView; INSTANCE:5]", "{DOWN}")

и т.д.

Но сейчас посмотрю (обмозгую ) что ты предложил.



Код: Выделить весь код
If @OSVersion <> "WIN_98" And @OSVersion <> "WIN_ME" Then
    BlockInput(1)
EndIf

Run("notepad")
WinWaitActive("Untitled - Notepad")
Send("{F5}")  ;pastes time and date

BlockInput(0)
Не получилось, таже ситуации.

буду делать через ControlSend.

Отправлено: 11:18, 26-10-2007 | #638


Пользователь


Сообщения: 141
Благодарности: 3

Профиль | Отправить PM | Цитировать


Доброго времени суток уважаемые ..очень нужна ваша помошь. нужно установить лицензионное ПО на более сотни машин соответствено на каждое свой ключ. есть предположение что с помошью автоита можно работать с файлом где построчно будут ключи ...напишите пожалуйста как взять из текстового или экселевского файла строку и передать ее в программу....?

Отправлено: 14:23, 26-10-2007 | #639


Аватара для Maza Faka

Ветеран


Сообщения: 604
Благодарности: 133

Профиль | Отправить PM | Цитировать


mikola1983
Скажем у каждого компьютер имеется имя, например WS1; WS2 и т.д., также имеется текстовый файл с ключами, где номер каждой строки, соответствует номеру машины, соответственно можно написать такой скрипт:
Код: Выделить весь код
$number = StringRegExpReplace(@ComputerName, "[a-zA-z]", "") ; Получаем номер машины
$list = "c:\list.txt" ;Переменная с текстовым файлом, в котором находятся лицензии
$string = FileReadLine($list, $number) ;Считываем строку соответствующую номеру компьютера и присваиваем переменной
MsgBox(0, "", $string) ;Это просто просмотр строки
;Здесь твой код...
Просто переделай под свою задачу

Отправлено: 17:11, 26-10-2007 | #640



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход