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

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

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

(*.*)


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


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

Профиль | Сайт | Отправить 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

 

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

Ветеран


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

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


amel27,
Цитата amel27:
ключевой переменной, передаваемой между рекурсивными вызовами является $sRetPath
Значит получается, что переменная совсем не пуста, и в ней хранятся временные данные при вызове функции?

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение


Отправлено: 16:56, 25-08-2007 | #391



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

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


Googler


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

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


Maza Faka
Цитата:
получается, что переменная совсем не пуста, и в ней хранятся временные данные при вызове функции?
практически она все время пуста, как только ей присваивается значение функция немедленно завершает свою работу и возвращает это значение.... а если ничего не найдено, то возвращает значение инициализации - "пусто".

Creat0R
Цитата:
чтобы все игроки ждали одинаковое количество игр между своими встречами
Это как понимать? Что-то мне подсказывает, что с таким условием задача не имеет решения... Как минимум, из этого следует, что для каждого игрока должен быть СВОЙ уникальный период ожидания, в противном случае игроки с одинаковым интервалом однажды встретившись играли бы только друг с другом...
ADD:
Цитата:
Накалякал тут функцию для отображения MsgBox со счётчиком отсчёта + возможностью указывания hWnd
чем тебя не устраивает штатный GUI?.. хотелось бы знать причину

Последний раз редактировалось amel27, 27-08-2007 в 11:11.


Отправлено: 10:30, 27-08-2007 | #392


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
Что-то мне подсказывает, что с таким условием задача не имеет решения
После двух дней колдования, я пришёл к тому же выводу
Всегда получается что кто-то ждёт дольше или меньше.. даже если речь идёт о 5-ти, и даже 4-тёх игроках...

В результате сделал типа такого (набросок с реальной бумаги ) :

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

Global $PlayersString = "Вася|Петя|Паша|Толик|Лёня|Кеша"
Global $TotalPlayers = UBound(StringSplit($PlayersString, "|"))-1
Global $TotalGames = ($TotalPlayers * ($TotalPlayers-1)) / 2
Global $GamesListArr = GetRandomGames($PlayersString, $TotalPlayers, $TotalGames)

_ArrayDisplay($GamesListArr)

Func GetRandomGames($PlayersString, $TotalPlayers, $TotalGames)
    Local $GamesList = ''
    Local $PlayersArray = StringSplit($PlayersString, "|")

    Local $SortArray[$TotalPlayers+1], $GamesStr = ''

        For $i = 1 To $TotalPlayers
        $SortArray[$i] = $PlayersArray[Random(1, $TotalPlayers, 1)]
        While StringInStr($GamesStr, $SortArray[$i])
            $SortArray[$i] = $PlayersArray[Random(1, $TotalPlayers, 1)]
        WEnd
        $GamesStr &= $SortArray[$i] & @CRLF
    Next

        Local $GamesListArr[$TotalGames+1]

        Switch $TotalPlayers
        Case 6
            $GamesListArr[1] = $SortArray[1] & @Tab & " [vs] " & @Tab & $SortArray[3]
            $GamesListArr[2] = $SortArray[2] & @Tab & " [vs] " & @Tab & $SortArray[4]
            $GamesListArr[3] = $SortArray[5] & @Tab & " [vs] " & @Tab & $SortArray[6]
            $GamesListArr[4] = $SortArray[1] & @Tab & " [vs] " & @Tab & $SortArray[4]
            $GamesListArr[5] = $SortArray[3] & @Tab & " [vs] " & @Tab & $SortArray[2]
            $GamesListArr[6] = $SortArray[4] & @Tab & " [vs] " & @Tab & $SortArray[6]
            $GamesListArr[7] = $SortArray[1] & @Tab & " [vs] " & @Tab & $SortArray[5]
            $GamesListArr[8] = $SortArray[2] & @Tab & " [vs] " & @Tab & $SortArray[6]
            $GamesListArr[9] = $SortArray[4] & @Tab & " [vs] " & @Tab & $SortArray[3]
            $GamesListArr[10] = $SortArray[1] & @Tab & " [vs] " & @Tab & $SortArray[2]
            $GamesListArr[11] = $SortArray[5] & @Tab & " [vs] " & @Tab & $SortArray[4]
            $GamesListArr[12] = $SortArray[6] & @Tab & " [vs] " & @Tab & $SortArray[3]
            $GamesListArr[13] = $SortArray[2] & @Tab & " [vs] " & @Tab & $SortArray[5]
            $GamesListArr[14] = $SortArray[1] & @Tab & " [vs] " & @Tab & $SortArray[6]
            $GamesListArr[15] = $SortArray[3] & @Tab & " [vs] " & @Tab & $SortArray[5]
    EndSwitch
    Return $GamesListArr
EndFunc
Т.е сначала играет первый с третьим (разбросано по элементам массива [1] vs [3]), потом второй с четвёртым, и т.д... вобщем сначала я на бумаге расписал оптимальные(?) вариации, таким образом чтобы никто долго не ждал следующей игры, а также чтобы не получилось такого что кто-то играет много игр подряд... а потом всё это перенёс в формат массива.
Сделать всё это без бумаги (т.е программно сгененрировать оптимальные варианты) у меня не удалось, а оно очень помогло бы, т.к могут быть и не 6 игроков, а, скажем 7 или 5 и т.д... для каждого количества игроков я конечно могу также выкрутиться с бумагой (что я и сделал для 5-ти и 4-ёх игроков, для этого в принципе и оставлен Switch в функции ), но каждый раз так подбирать вручную весьма утомительно .

Цитата:
чем тебя не устраивает штатный GUI?.. хотелось бы знать причину
Во-первых мне просто как припятствие хотелось это решить (оно мне надо?!)...
А на счёт GUI, ну, у меня есть пару вариации с отсчётом и обычные, но дело в том, что довольно сложно подобрать оптимальный вариант когда речь идёт о размерах диалога MsgBox в соответствии с передаваемым текстом, т.е мне до сих пор не удалось просчитать точно какой размер должен иметь гуи, чтобы поместить в себе указанный текст, и при этом не "покрыть" кнопки текстом (ведь передаваться могут также и символы перевода строки, это само по себе припятствие), а также ещё не знаю на какой системный файл можно понадеятся чтобы украсть с него иконки для отображения

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

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

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


Отправлено: 19:46, 27-08-2007 | #393


Googler


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

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


Цитата Creat0R:
каждый раз так подбирать вручную весьма утомительно
не вижу смысла в Random(), ИМХО нужно тупо перебрать все возможные варианты... Вообще-то ввиду критичности к скорости для таких переборов обычно используют ASM, но для отладки алгоритма вполне подойдет любой язык, а использование эвристических ограничений на перебор, найденных при анализе задачи может существенно сократить количество вариантов.

Вот вариант скрипта, пытающегося перебрать все варианты, в качестве условий я задал постоянство периода для одного игрока и разный период для разных игроков (найдены при анализе задачи). Удачной комбинацией считается использование всех возможных партий хотя бы по разу.
Код: Выделить весь код
Global Const $iCNT = 6 ; Количество игроков
Global Const $iMAX = _Factorial($iCNT) / (_Factorial($iCNT-2)*_Factorial(2)) ; Количество всевозможных пар игроков

; Массив "игроки"
; $aPlayers[$i][0] - кол-во сыгранных игроком партий
; $aPlayers[$i][1] - время последней партии игрока (индекс $aTimeLine[])
; $aPlayers[$i][2] - временной интервал между последней и предпоследней партиями игрока

Global $aPlayers[$iCNT+1][3]
; Массив "игровые пары"
; $aPatterns[$i][1] - битовый паттерн пары (не используется)
; $aPatterns[$i][2] - битовый паттерн 1-го игрока (не используется)
; $aPatterns[$i][3] - битовый паттерн 2-го игрока (не используется)
; $aPatterns[$i][4] - номер 1-го игрока
; $aPatterns[$i][5] - номер 2-го игрока

Global $aPatterns[$iMAX+1][6], $k=0
; Заполнение массива всевозможных пар
For $i=1 To $iCNT
    For $j=$i+1 To $iCNT
        $k+=1
        $aPatterns[$k][4]=$i
        $aPatterns[$k][5]=$j
        $aPatterns[$k][2]=BitRotate(1, $i-1)
        $aPatterns[$k][3]=BitRotate(1, $j-1)
        $aPatterns[$k][1]=BitOR($aPatterns[$k][2],$aPatterns[$k][3])
    Next
Next

; Массив "линия времени"
;   $i - порядковый номер игры (aka "дискретное время")
;   $aTimeLine[$i] - пара игроков (индекс массива $aPatterns)
Global $aTimeLine[2] = [1,0]

; Основной цикл перебор:
;   выход по завершению перебора всех вариантов,
;   либо при нахождении нужного
While $aTimeLine[0]>0 And Not(_CheckTimeLine())
    $ret = _PatternNext() ; ищем следующего предендента
    If $ret Then
        _PatternAdd($ret)
        $aTimeLine[0]+=1
    Else
        _PatternDel()
        $aTimeLine[0]-=1
    EndIf
    ReDim $aTimeLine[$aTimeLine[0]+1]
    ; вывод промежуточного результата
    _TimeLinePrint()
WEnd

; Поиск следующей партии, подходящей по условию
Func _PatternNext()
    Local $i
    For $i=$aTimeLine[$aTimeLine[0]]+1 To $iMAX
        If _PatternCheck($i) Then Return $i
    Next
    Return 0
EndFunc

; Процедура удаления предыдущей комбинации:
;   (все возможные партии исчерпаны)
Func _PatternDel()
    Local $iDEL=$aTimeLine[$aTimeLine[0]] ; код последней проверенной партии
    If $iDEL Then
        Local $i, $aP[3]=[2, $aPatterns[$iDEL][4], $aPatterns[$iDEL][5]] ; номера игроков
        ; Обновляем характеристики игроков
        For $i=1 To $aP[0]
            $aPlayers[$aP[$i]][0]-=1 ; уменьшаем счетчик игр
            $aPlayers[$aP[$i]][1]-=$aPlayers[$aP[$i]][2] ; расчет индекса предыдущей игры
        Next
        $aPatterns[$iDEL][0]-=1 ; уменьшаем счетчик для партии
    EndIf
EndFunc

; Процедура формирования следующей комбинации:
;   (добавление очередной партии)
Func _PatternAdd($iNext)
    _PatternDel() ; удаление предыдущего вариата
    $aPatterns[$iNext][0]+=1 ; увеличиваем счетчик для партии
    $aTimeLine[$aTimeLine[0]]=$iNext ; устанавливаем новое значение партии
    Local $aP[3]=[2, $aPatterns[$iNext][4], $aPatterns[$iNext][5]] ; номера игроков
    ; Обновляем характеристики игроков
    For $i=1 To $aP[0]
        $aPlayers[$aP[$i]][0]+=1 ; увеличиваем счетчик игр
        If $aPlayers[$aP[$i]][0]=2 Then $aPlayers[$aP[$i]][2]=$aTimeLine[0]-$aPlayers[$aP[$i]][1] ; интервал игр
        $aPlayers[$aP[$i]][1]=$aTimeLine[0] ; индекс последней игры
    Next
EndFunc

; Условие на добавляемую в конец "линии времени"
;   партию ("пару игроков")
Func _PatternCheck($iPattern)
    Local $i, $k, $aL[3]=[2,0,0], $aB[3]=[2,0,0] ; интервалы и результат проверки игроков
    Local $aP[3]=[2, $aPatterns[$iPattern][4], $aPatterns[$iPattern][5]] ; номера игроков
    ; Проверка параметров каждого игрока
    For $k=1 To $aP[0]
        If $aPlayers[$aP[$k]][0]=1 Then ; для 2-й партии
            $aL[$k] = $aTimeLine[0]-$aPlayers[$aP[$k]][1] ; устанавливаем значение интервала
            ; Условия на интервал между играми:
            If $aL[$k]=1 Then Return False ; запрет на непрерывную игру
            For $i=1 To $iCNT ; запрет на одинаковые интервалы разных игроков
                If $i<>$k Then
                     If $aL[$k]=$aPlayers[$i][2] Then Return False
                EndIf
            Next
        ElseIf $aPlayers[$aP[$k]][0]>1 Then ; для последующих партий
            If $aTimeLine[0]-$aPlayers[$aP[$k]][1]<>$aPlayers[$aP[$k]][2] Then Return False ; проверка на постоянство интервала
        EndIf
    Next
    ; проверка совместных параметров двух игроков
    If $aPlayers[$aP[1]][0]=1 And $aPlayers[$aP[2]][0]=1 Then
        If $aL[1]=$aL[2] Then Return False
    EndIf
    Return True
EndFunc

; Условие на всю последовательность игр, по выполнении которого
 ;   программа считает, что искомый вариант найден
Func _CheckTimeLine()
    Local $i
    ; проверка на использование всех возможных "пар игроков"
    For $i=1 To $iMAX
        If $aPatterns[$i][0]=0 Then Return False
    Next
    Return True
 EndFunc

; Вывод на консоль обрабатываемого варианта
Func _TimeLinePrint()
    Local $s1='', $s2=''
    For $i=1 To $aTimeLine[0]
        If $aTimeLine[$i] Then
            $s1&=$aPatterns[$aTimeLine[$i]][4] &' '
            $s2&=$aPatterns[$aTimeLine[$i]][5] &' '
        EndIf
    Next
    If $aTimeLine[0] Then
        ConsoleWrite($s1&@CRLF&$s2&@CRLF&@CRLF)
    Else
        ConsoleWrite("NULL"&@CRLF)
    EndIf
EndFunc

; Расчет факториала
Func _Factorial($int)
    Local $i, $res=1
    For $i=1 To $int
        $res*=$i
    Next
    Return $res
EndFunc

Последний раз редактировалось amel27, 28-08-2007 в 06:06. Причина: ошибка в скрипте

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

Отправлено: 05:51, 28-08-2007 | #394


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
не вижу смысла в Random()
Это для того чтобы каждый раз гинерировался разный список игр..

Цитата:
Вот вариант скрипта, пытающегося перебрать все варианты, в качестве условий я задал постоянство периода для одного игрока и разный период для разных игроков (найдены при анализе задачи). Удачной комбинацией считается использование всех возможных партий хотя бы по разу. Я намеренно закомментировал запрет на игры без отдыха (период=1), как видно это не спасает задачу - решения все равно нет.
Хм... что-то не могу понять как это теперь применить на действии, т.е как в результате этой обработки получить список предстоящих игр?

Я понимаю что задачка немного(?) может показаться смутной, возможно если я приведу пример того что я уже сделал в виде ГУИ интерфейса (где я уже использую выше-приведённый мной метод), это поможет иметь более чёткое представление о задаче?


Цитата:
; Количество всевозможных пар игроков
Это имеется в виду общее (максимальное) количество игр?
Мне кажется это можно подсчитать таким образом - (Количество игроков * (количество игроков - 1)) / 2... т.е типа такого:

Код: Выделить весь код
$iMAX = ( $iCNT * ($iCNT-1) ) / 2
Ведь каждый должен сиграть с каждым, и тогда получается что при 6-ти игроках имеем 6 раз по 5, но так как сам с собой игрок играть не может , игр на самом деле в два раза меньше.

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

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

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


Отправлено: 06:20, 28-08-2007 | #395


Googler


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

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


Цитата Creat0R:
не могу понять как это теперь применить на действии
никак , скрипт не генерит последовательности, а перебирает по очереди все возможные (по условию) из доступных до первого успешного варианта... если таких нет, то результат "NULL". В данном случае как раз так - нет ни одного варианта... Зато позволяет поиграть ограничительными условиями и посмотреть как это повлияет на результат.(см. - исправил ошибку)
Цитата Creat0R:
Мне кажется это можно подсчитать таким образом
угу, это тоже самое... вдруг в будущем понадобится подсчитать число игр "пара на пару"?

Отправлено: 06:53, 28-08-2007 | #396


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
скрипт не генерит последовательности, а перебирает по очереди все возможные (по условию) из доступных до первого успешного варианта... если таких нет, то результат "NULL". В данном случае как раз так - нет ни одного варианта... Зато позволяет поиграть ограничительными условиями и посмотреть как это повлияет на результат
Т.е просто(?) проверка на "реальность" выполнения данной задачки (с указанными условиями)? Тоже полезное занятие Спасибо.

Цитата:
вдруг в будущем понадобится подсчитать число игр "пара на пару"?
Это уже слишком, пара на пару нечего считать, победители остаются

Чуть позже выложу скрипт с тем что я уже сделал, там всё вручную и никаких проверок, но зато я горжусь там одной функцией CalculateWinner() - функция для подсчёта победителей и очков у каждого в отдельности или у нескольких игроков сразу (если к примеру они делят первое-второе место, ну или другие места) на основе ввода результатов игр (1:0, 0:1 и т.д. для каждой сыгранной игры).

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

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

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


Отправлено: 07:15, 28-08-2007 | #397


Googler


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

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


Creat0R
Цитата:
Т.е просто(?) проверка на "реальность" выполнения данной задачки (с указанными условиями)?
да, как-то одно время увлекался решением различных головоломок на компьютере, почти все решаются аналогичным "лобовым" перебором с применением некоторых общих соображений... чтобы уложиться в осмысленные сроки
Цитата:
также ещё не знаю на какой системный файл можно понадеятся чтобы украсть с него иконки для отображения
ну, логично предположить, что "user32.dll"

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


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
логично предположить, что "user32.dll"
Ок, вот что получилось с MsgBox (_GuiMsgBox() )...

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

$Title = "My Custom MsgBox"
$Promt = "Are you sure?"
$CheckBoxText = "Don't show again"

$hWnd = WinGetHandle("")

$Ask = _GuiMsgBox(32, 2, $Title, $Promt, 330, 120, $CheckBoxText, 10, $hWnd, "OK", "Cancel")

$CheckBitAnd = BitAND($Ask, 8)

$Var = "Pressed "
Select
	Case $Ask - $CheckBitAnd = 1
		$Var &= "'OK'"
	Case $Ask - $CheckBitAnd = 6
		$Var &= "'Yes' or 'OK'"
	Case $Ask - $CheckBitAnd = 7
		$Var &= "'No' or 'Cancel'"
EndSelect

If $CheckBitAnd = 8 Then $Var &= @LF & "And CheckBox <" & $CheckBoxText & "> was Checked"

MsgBox(64, "Message", "Returned values:" & @LF & @LF & $Var)


Func _GuiMsgBox($IcoType,$Butt_Num,$Title,$Text,$Width,$Height,$CB_Text=-1,$Timer=-1,$hWnd=0,$B1Text=-1,$B2Text=-1,$ExStyle=-1)
	Local $Yes, $No, $OK, $CheckBox=-1, $Gui, $GuiHeight = $Height, $TitleType = $WS_CAPTION+$WS_POPUP, $Msg, $ReturnVal = 0
	Local $DefButton = $OK, $DefButtonText = $B1Text, $Counter
	
	Switch $IcoType
		Case 16
			$IcoType = 103
		Case 32
			$IcoType = 102
		Case 48
			$IcoType = 101
		Case 64
			$IcoType = 104
		Case Else
			$IcoType = 102
	EndSwitch
	
	Local $Old_Opt_GOEM = Opt('GuiOnEventMode', 0)
	Local $Old_Opt_GCOE = Opt('GUICloseOnESC', 0)
	
	If $hWnd <> 0 Then WinSetState($hWnd, "", @SW_DISABLE)
	If $Butt_Num = 1 Then $TitleType += $WS_SYSMENU
	If $CB_Text <> -1 Then $GuiHeight += 25
	
	If $B1Text = -1 Then $B1Text = 'OK'
	If $B2Text = -1 Then $B2Text = 'Cancel'
	
	$Gui = GuiCreate($Title, $Width, $GuiHeight, -1, -1, $TitleType, $ExStyle, $hWnd)
	
	GUICtrlCreateIcon('user32.dll', $IcoType, 10, 10)
	GUICtrlCreateLabel($Text, 70, 15, $Width-80, $Height-50)
	
	Select
		Case $Butt_Num = 2
			$Yes = GUICtrlCreateButton($B1Text, ($Width/2)-90, $Height-35, 70, 20)
			$DefButton = $Yes
			
			$No = GUICtrlCreateButton($B2Text, ($Width/2)+20, $Height-35, 70, 20)
			
			GUICtrlSetState($No, $GUI_ONTOP)
			GUICtrlSetState($Yes, $GUI_ONTOP+$GUI_DEFBUTTON)
		Case Else
			$OK = GUICtrlCreateButton($B1Text, ($Width-70)/2, $Height-35, 70, 20)
			GUICtrlSetState($OK, $GUI_DEFBUTTON+$GUI_ONTOP)
			$DefButton = $OK
	EndSelect
	
	If $CB_Text <> -1 Then $CheckBox = GUICtrlCreateCheckbox($CB_Text, 15, $Height-10)
	GuiSetState(@SW_SHOW, $Gui)
	
	If $Timer > 0 Then
		$Counter = $Timer
		$Timer = TimerInit()
		$DefButtonText = GUICtrlRead($DefButton)
		GUICtrlSetData($DefButton, $DefButtonText & ' (' & $Counter & ')')
	EndIf
	
	While 1
		$Msg = GUIGetMsg()
		
		If $Timer > 0 And TimerDiff($Timer) >= 1000 Then
			$Timer = TimerInit()
			$Counter -= 1
			GUICtrlSetData($DefButton, $DefButtonText & ' (' & $Counter & ')')
			If $Counter < 0 Then $Msg = $DefButton
		EndIf
		
		Select
			Case $Butt_Num = 2 And $Msg = $Yes
				$ReturnVal = 6
				ExitLoop
			Case $Butt_Num = 2 And $Msg = $No
				$ReturnVal = 7
				ExitLoop
			Case $Msg = -3 Or ($Msg = $OK And $Butt_Num <> 2)
				$ReturnVal = 1
				ExitLoop
		EndSelect
	Wend
	
	If GUICtrlRead($CheckBox) = 1 Then $ReturnVal += 8
	
	If $hWnd <> 0 Then WinSetState($hWnd, "", @SW_ENABLE)
	GUIDelete($Gui)
	Opt('GuiOnEventMode', $Old_Opt_GOEM)
	Opt('GUICloseOnESC', $Old_Opt_GCOE)
	Return $ReturnVal
EndFunc
Пока только 2 кнопки поддерживаются, на больше если честно сил не хватило.

Возвращаемое значение:

6 = Кнопка ОК / Yes была нажата.
7 = Кнопка Cancel / No была нажата.
6+8 = Кнопка ОК / Yes была нажата и была поставлена птичка.
7+8 = Кнопка Cancel / No была нажата и была поставлена птичка.

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

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

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


Отправлено: 09:32, 28-08-2007 | #399


Googler


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

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


Цитата Creat0R:
вот что получилось
вчепятляет... особенно количество параметров

по поводу системного окна можно предположить два варианта:
1. Запускать тот же скрипт в другом процессе с передачей ключевого параметра, но тогда возникает проблема с возвратом результата, ее можно решить (к примеру) передачей сообщения основному окну через SendMessage().
2. Запускать функцию в отдельном потоке того же процесса с использованием CallBack.

Отправлено: 09:51, 28-08-2007 | #400



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




 
Переход