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

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

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

(*.*)


Сообщения: 36549
Благодарности: 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

 

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


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

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


Creat0R
Цитата:
надо будет проверить... спасибо
Это может сработать если провайдер не требует конкретного имени и конкретного пароля, я почему-то решил что у локального подключения они отсутствуют...

Отправлено: 05:37, 29-07-2007 | #211



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

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


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

Ветеран


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

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


А как можно проиграть плейлист? Никак не получается, проигрывается первый трэк и скрипт завершается, кому не лень, гляньте плз.
Код: Выделить весь код
#include <GUIConstants.au3>
$file = ""
GUICreate("Player", 300, 200, -1, -1, -1)
GUISetIcon(@ProgramFilesDir & "\Winamp\winamp.exe", 0)
GUICtrlCreateLabel("Simple player", 100, 5, 100, 15, -1)

;Progress
;$progress = GUICtrlCreateProgress(90, 25, 150, 15)
;GUICtrlSetLimit($progress, 100, 0)
;GUICtrlSetData($progress, 90)

;Menu
$menu = GUICtrlCreateMenu("File", -1)
$playlist = GUICtrlCreateMenuItem("Open playlist", $menu)
GUICtrlCreateMenuItem("", $menu)
$quit = GUICtrlCreateMenuItem("Quit", $menu)

;Button
$play = GUICtrlCreateButton("Play", 10, 115, 60)
$open = GUICtrlCreateButton("Open", 10, 10, 60)

;Slider
$slider = GUICtrlCreateSlider(83, 115, 100, 30, -1)
GUICtrlSetLimit($slider, 100, 0)
GuiCtrlSetData($slider, 100)

GUISetState()

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $open
        $file = FileOpenDialog("Add selected file", "", "Sound files (*.mp3)", 1)
        If @error = 0 Then SoundPlay($file, 0)
        Case $msg = $play
            If Not $file = "" Then
                SoundPlay($file, 0)
            Else
                MsgBox(64, "Error", "Please open file")
            EndIf
        Case $msg = $slider
            $Read_slider = GUICtrlRead($slider)
            SoundSetWaveVolume($Read_slider)
        Case $msg = $Gui_Event_Close
            ExitLoop
        Case $msg = $quit
            Exit
            Case $msg = $playlist
            $list = FileOpenDialog("Add playlist", "", "Playlist (*.m3u)", 1)
            $mp3_list = FileOpen($list, 0)
            Prepare($mp3_list)
            FileClose($mp3_list)
        EndSelect
    WEnd

    Func Prepare($list)
    While 1
        $music = FileReadLine($mp3_list)
        If @error <> 0 Then ExitLoop
            Play($music)
    WEnd
EndFunc

Func Play($music)
    SoundPlay($music, 0)
EndFunc
Плейлист имеете такой формат:
\\ws10\d\Music\Scorpions\Scorpions - Destin.mp3
\\ws10\d\Music\Scorpions\SCORPIONS - EYE TO EYE.mp3
\\ws10\d\Music\Scorpions\Scorpions - Holiday.mp3

Последний раз редактировалось Sanja Alone, 08-08-2007 в 10:31. Причина: Вложенный тэг code


Отправлено: 11:24, 30-07-2007 | #212


Googler


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

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


Creat0R
Цитата:
Кстати, а это нормально что при выборе системной папки (к примеру Мой компьютер), возвращается пустое значение? в оригинальной функции возвращается имя выбранного элемента (“Мой компьютер”). >>>
Исправленный вариант с расширенными комментариями,
чуть позже выложу CallBack-функцию для "нового стиля" с ограничением типов выбираемых объектов.
Код: Выделить весь код
#include <GUIConstants.au3>
#include <DllCallBack.au3>
; Сообщения, формируемые диалогом выбора
Global Const $BFFM_INITIALIZED = 1 ; Инициализация диалога завершена
Global Const $BFFM_SELCHANGED = 2 ; Выбор пользователем нового каталога
Global Const $BFFM_VALIDATEFAILEDA = 3 ; ANSI: в окно редактирования введен некорректный текст
Global Const $BFFM_VALIDATEFAILEDW = 4 ; WideChar: в окно редактирования введен некорректный текст
; Сообщения, принимаемые диалогом выбора
Global Const $BFFM_ENABLEOK = $WM_USER + 101 ; Включить/выключить кнопку "Ok"
Global Const $BFFM_SETOKTEXT = $WM_USER + 105 ; Задать текст кнопки "Ok"
Global Const $BFFM_SETEXPANDED = $WM_USER + 106 ; Раскрыть в дереве определенную папку
Global Const $BFFM_SETSTATUSTEXTA = $WM_USER + 100 ; ANSI: задать текст статусной строки
Global Const $BFFM_SETSTATUSTEXTW = $WM_USER + 104 ; WideChar: задать текст статусной строки
Global Const $BFFM_SETSELECTIONA = $WM_USER + 102 ; ANSI: переместить курсор к определенному каталогу в дереве
Global Const $BFFM_SETSELECTIONW = $WM_USER + 103 ; WideChar: переместить курсор к определенному каталогу в дереве

Global Const $BIF_NEWDIALOGSTYLE = 0x40 ; Вывести диалоговое окно "нового стиля" (IE 5.0)
; Флаги, применимые только для диалога в "старом стиле" (флаг $BIF_NEWDIALOGSTYLE сброшен)
Global Const $BIF_RETURNONLYFSDIRS = 0x1 ; Выбирать только объекты файловой системы
Global Const $BIF_STATUSTEXT = 0x4 ; Отображение дополнительного текстовое поля
Global Const $BIF_BROWSEFORCOMPUTER = 0x1000 ; Выбирать только компьютеры в сетевом окружении
Global Const $BIF_BROWSEFORPRINTER = 0x2000 ; Выбирать только принтеры в сетевом окружении
; Флаги, применимые только для диалога в "новом стиле" (флаг $BIF_NEWDIALOGSTYLE установлен)
Global Const $BIF_UAHINT = 0x100 ; Показывать текст "подсказки", недействителен для флага $BIF_EDITBOX (IE 6.0)
Global Const $BIF_NONEWFOLDERBUTTON = 0x200 ; Не отображать кнопку создания нового каталога (IE 6.0)
Global Const $BIF_SHAREABLE = 0x8000 ; Отображать специфические сетевые ресурсы: диски, принтеры, задания, etc. (IE 5.0)
; Флаги, примененимые к обоим стилям диалога
Global Const $BIF_DONTGOBELOWDOMAIN = 0x2 ; Не открывать домены в сетевом окружении
Global Const $BIF_BROWSEINCLUDEFILES = 0x4000 ; Позволить выбирать файлы (IE 5.0)
Global Const $BIF_EDITBOX = 0x10 ; Включить строку редактирования (IE 4.71)
Global Const $BIF_VALIDATE = 0x20 ; Посылать сообщение о наборе недопустимого имени (IE 4.71)
; Маска допустимых флагов для диалога "старого стиля"
Global Const $FSF_ALLOLDSTYLEFLAGS = BitOR ( _
    $BIF_DONTGOBELOWDOMAIN, $BIF_BROWSEINCLUDEFILES, $BIF_EDITBOX, $BIF_VALIDATE, _
    $BIF_BROWSEFORCOMPUTER, $BIF_BROWSEFORPRINTER, $BIF_RETURNONLYFSDIRS, $BIF_STATUSTEXT)
; Маска допустимых флагов для диалога "нового стиля"
Global Const $FSF_ALLNEWSTYLEFLAGS = BitOR ( $BIF_NEWDIALOGSTYLE, _
    $BIF_DONTGOBELOWDOMAIN, $BIF_BROWSEINCLUDEFILES, $BIF_EDITBOX, $BIF_VALIDATE, _
    $BIF_NONEWFOLDERBUTTON, $BIF_UAHINT, $BIF_SHAREABLE)

;   $sText - текст приглашения;
;   $iRoot - код корневого каталога (0 - "рабочий стол");
;   $iFlags - набор флагов;
;   $sIniDir - стартовый каталог;
;   $hWnd - хэндл родительского окна;
;   $sCallbackProc - имя CallBack-процедуры (или пустая строка)
Func _FileSelectFolder ($sText = '', $iRoot = 0, $iFlags = 0, $sIniDir = @ScriptDir, $hWnd = 0, $sCallbackProc = '_FileSFCallbackProc')
    Local $ret, $pidl, $res='', $pCallbackProc=0, $iMask = $FSF_ALLOLDSTYLEFLAGS
    ; Контроль входных параметров
    If $sIniDir<>'' Then $sIniDir = StringRegExpReplace($sIniDir, '([^\\])\\*$', '\1\\')
    If StringRight($sIniDir, 2)=':\' Then $sIniDir &= '\'
    If BitAND($iFlags, $BIF_NEWDIALOGSTYLE) Then $iMask = $FSF_ALLNEWSTYLEFLAGS
    ; Создание и инициализация основных структур данных
    Local $uBI = DllStructCreate ("hwnd;ptr;ptr;ptr;int;ptr;ptr;int") ; BROWSEINFO
    Local $uTX = DllStructCreate ("char[260];char") ; текст приглашения
    Local $uMP = DllStructCreate ("char[260]") ; путь/имя выбранного объекта
    Local $uCB = DllStructCreate ("char[260];int") ; CallBack структура
    DllStructSetData ($uTX, 1, $sText)
    DllStructSetData ($uCB, 1, $sIniDir)
    DllStructSetData ($uCB, 2, $iFlags)
    ; Заполнение структуры BROWSEINFO
    DllStructSetData ($uBI, 1, $hwnd)
    DllStructSetData ($uBI, 3, DllStructGetPtr($uMP))
    DllStructSetData ($uBI, 4, DllStructGetPtr($uTX))
    DllStructSetData ($uBI, 5, BitAND($iFlags, $iMask))
    DllStructSetData ($uBI, 7, DllStructGetPtr($uCB))
    ; Получение указателя на корневую папку (PIDL)
    DllCall ("shell32.dll", "ptr", "SHGetSpecialFolderLocation", "int", 0 , "int", $iRoot , "ptr", DllStructGetPtr($uBI, 2))
    ; Получение указателя на CallBack-функцию
    If $sCallbackProc<>'' Then DllStructSetData ($uBI, 6, _DllCallBack($sCallbackProc,'hwnd;uint;long;ptr'))
    ; Запуск системного диалога и обработка полученного указателя (PIDL)
    $pidl = DllCall ("shell32.dll", "ptr", "SHBrowseForFolder", "ptr", DllStructGetPtr($uBI))
    If IsArray($pidl) Then
        $res = DllStructGetData ($uMP, 1) ; сохраняем имя объекта
        If $pidl[0] Then
            $ret = DllCall ("shell32.dll", "int", "SHGetPathFromIDList", "ptr", $pidl[0], "ptr", DllStructGetPtr($uMP))
            If IsArray($ret) Then
                If $ret[0] Then $res = DllStructGetData ($uMP, 1) ; сохраняем путь объекта
                DllCall ("ole32.dll", "int", "CoTaskMemFree", "ptr", $pidl[0]) ; чистим за собой
            EndIf
        EndIf
    EndIf
    If $pCallbackProc Then _DllCallBack_Free ($pCallbackProc) ; закрытие указателя
    DllCall ("ole32.dll", "int", "CoTaskMemFree", "ptr", DllStructGetData ($uBI, 2)) ; чистим за собой
    Return $res
EndFunc ;==> _FileSelectFolder

; Функция обратного вызова для _FileSelectFolder по умолчанию
Func _FileSFCallbackProc ($hWnd, $iMsg, $wParam, $lParam)
    Local $uTB = DllStructCreate("char[260];ptr"), $uCB = DllStructCreate ("char[260];int", $lParam)
    Local Const $flg = BitOr($BIF_NEWDIALOGSTYLE, $BIF_RETURNONLYFSDIRS)
    Local $ret, $tst = BitXOR(BitAnd(DllStructGetData($uCB,2), $flg), $flg)
    Switch $iMsg
        Case $BFFM_INITIALIZED
            DllCall ("user32.dll","int","SendMessage", "hwnd", $hWnd, "int", $BFFM_SETSELECTIONA, "int", 1, "ptr", DllStructGetPtr($uCB,1))
            $ret = DllCall ("shell32.dll", "int", "SHParseDisplayName", _
                "wstr", DllStructGetData($uCB,1), "ptr", 0, "ptr", DllStructGetPtr($uTB,2), "int", 0, "ptr", 0)
            If IsArray($ret) Then
                If $ret[0]=0 Then
                     _FileSFCallbackProc($hWnd, $BFFM_SELCHANGED, DllStructGetData($uTB,2), $lParam)
                    DllCall ("ole32.dll", "int", "CoTaskMemFree", "ptr", DllStructGetData($uTB,2)) ; чистим за собой
                EndIf
            EndIf
        Case $BFFM_SELCHANGED
            If $tst=0 Then
                 $ret = DllCall("shell32.dll", "int", "SHGetPathFromIDList", "ptr", $wParam, "ptr", DllStructGetPtr($uTB,1))
                If IsArray($ret) Then
                    If $ret[0] Then
                        DllCall("user32.dll","int","SendMessage","hwnd",$hWnd,"int",$BFFM_ENABLEOK,"int",0,"ptr",1)
                    Else
                        DllCall("user32.dll","int","SendMessage","hwnd",$hWnd,"int",$BFFM_ENABLEOK,"int",0,"ptr",0)
                    EndIf
                EndIf
            EndIf
    EndSwitch
EndFunc ;==> __FileSFCallbackProc

Последний раз редактировалось amel27, 06-08-2007 в 07:29. Причина: оптимизация

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

Отправлено: 11:47, 30-07-2007 | #213


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


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

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


Как можно с помощью AutoIt3 использовать обычный Twain сканнер?

Отправлено: 22:27, 30-07-2007 | #214


Аватара для Creat0R

Must AutoIt


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

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


Maza Faka
Цитата:
как можно проиграть плейлист?
Это не так уж просто, я сам начал давненько писать плеер, всё никак не осмелюсь его закончить, чтобы ты более менее представлял себе структуру подобного плеера (в моём стиле ), вот тебе пример с добавлением в плей лист как отдельных треков, так и плейлист-файла (*.m3u) - для считывания плейлист-файла я написал функцию обработки строк (_M3uToArray()), все пути к файлам треков считываются в массив...

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

GUICreate("Player", 300, 200, -1, -1, -1)
GUISetIcon(@ProgramFilesDir & "\Winamp\winamp.exe", 0)

$Playlist = GUICtrlCreateListView("File Name|Path", 20, 50, 260, 120)

$Play = GUICtrlCreateButton("Play", 20, 10, 60)
$Open = GUICtrlCreateButton("Open", 110, 10, 60)

GUISetState()

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $Open
            $OpenFile = FileOpenDialog("Add selected file", "", "Sound files (*.mp3;*.m3u)", 1)
            If @error Then ContinueLoop

                        Local $FilesArray[2] = [1, $OpenFile]
            If StringRight($OpenFile, 3) = "m3u" Then $FilesArray = _M3uToArray($OpenFile)

                        For $i = 1 To UBound($FilesArray)-1
                $FileName = StringRegExpReplace($FilesArray[$i], "^.*\\", "")
                GUICtrlCreateListViewItem($FileName & "|" & $FilesArray[$i], $PlayList)
            Next
        Case $msg = $Play
            $Selected = _GUICtrlListViewGetItemText($PlayList, -1, 1)
            If $Selected <> "" Then
                SoundPlay($Selected, 0)
            Else
                MsgBox(64, "Error", "Please select file")
            EndIf
        Case $msg = $GUI_EVENT_CLOSE
            Exit
    EndSelect
WEnd

Func _M3uToArray($M3uPath)
    If StringRight($M3uPath, 4) <> ".m3u" Or Not FileExists($M3uPath) Then Return -1
    Local $OpenM3u = FileOpen($M3uPath, 0), $M3uArr[1]
    While 1
        $CurrentLine = FileReadLine($OpenM3u)
        If @error = -1 Then ExitLoop
        If StringLeft($CurrentLine, 4) <> "#EXT" Then _ArrayAdd($M3uArr, $CurrentLine)
    WEnd
    FileClose($OpenM3u)
    $M3uArr[0] = UBound($M3uArr) - 1
    Return $M3uArr
EndFunc
P.S
Чтобы после проигрывания одного трека начал проигрываться другой, нужно использовать библиотеку Sound.au3, там есть функции для определения статуса текущей песни, перемотка песни, ну и в принцепе все основные функции требуемые для примитивного плеера

amel27
Цитата:
Исправленный вариант с расширенными комментариями
Биг сенкс! Возвращается имя обьекта как положенно!

geka6pucT
Цитата:
Как можно с помощью AutoIt3 использовать обычный Twain сканнер?
А подробнее можно? “использовать” можно понять по разному

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

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

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


Последний раз редактировалось Creat0R, 31-07-2007 в 04:43. Причина: Добавление P.S ;)


Отправлено: 04:04, 31-07-2007 | #215


Аватара для Creat0R

Must AutoIt


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

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


amel27
Есть ещё проблема с функцией _FileOpenDialog() - Если использовать флаг 4 (возможность выделения более одного файла), то функция возвращает очень много символов | и иногда между ними проскакивают разные цифры...

Это лечится?

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

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

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


Отправлено: 04:39, 31-07-2007 | #216


Ветеран


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

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


Товарищи, подскажите кто знает формат командной строки утилиты Exe2aut.exe кот. идет в комплекте с дистрибутивом?
В старых версиях было Exe2aut.exe /in файлю.exe /out файл.au3 . Видимо формат сменился или от комстроки совсем отказались.

Отправлено: 07:36, 31-07-2007 | #217


Аватара для Creat0R

Must AutoIt


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

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


EgOrus,
Цитата:
или от комстроки совсем отказались
Точнее забыли про неё
В 3.2.5.0 её вернули как я понял.

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

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

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:15, 31-07-2007 | #218


Googler


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

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


Creat0R
Цитата:
Это лечится?
опять танцы вокруг Binary ... замени кусок между If и EndIf:
Код: Выделить весь код
If BitAND ($iOpt, 4) Then
    $i = 1
    While 1
        If Binary(DllStructGetData ($usFile, 1, $i))=0 Then
            If Binary(DllStructGetData ($usFile, 1, $i+1))=0 Then
                ExitLoop
            Else
                DllStructSetData ($usFile, 1, '|', $i)
            EndIf
        EndIf
        $i += 1
    Wend
EndIf
P.S. честно говоря пока не понял как сравнивать бинарные данные, но вроде работает
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:03, 31-07-2007 | #219


Ветеран


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

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


Creat0R
благодарю, бэтку даже и не заметил

Отправлено: 15:02, 31-07-2007 | #220



Компьютерный форум 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




 
Переход