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

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

Закрытая тема
Настройки темы
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

(*.*)


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


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

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


Изменения
Автор: Vadikan
Дата: 21-01-2009
Описание: архив
Внимание!


В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема.

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно Заголовок темы должен быть осмысленным.



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


Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

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

Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


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

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

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

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

 

Аватара для Creat0R

Must AutoIt


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

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


Иск,
Во-первых это очень и очень не практично в цикле вот так записывать интенсивно в ини-файл, если очеь нужно, то делать это хотябы раз в несколько (десятков) секунд.

По поводу прерывания цикла. Это можно сделать простой проверкой переменной, присваивать ей значение при запуске фуннкции:

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

Global $iLoopIsPaused = False

Opt("GUIOnEventMode", 1)
GUICreate("Test", 250, 200, 1024, 0)
GUISetBkColor(0xFFFFFF)
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents")
GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents")
GUISetState(@SW_SHOW)

$tab = GUICtrlCreateTab(10, 10, 230, 180)

$tab2 = GUICtrlCreateTabItem("3")
GUICtrlCreateLabel("3", 30, 53, 130, 20)
$tab2combo = GUICtrlCreateCombo("", 170, 50, 60, 40)
GUICtrlSetData(-1, "40|30|20", "30") ; default 80%

$tab1 = GUICtrlCreateTabItem("2")
GUICtrlCreateLabel("2", 30, 53, 130, 20)
$tab1combo = GUICtrlCreateCombo("", 170, 50, 60, 40)
GUICtrlSetData(-1, "70|80|90", "90") ; default 80%
$MHP = GUICtrlRead($tab1combo)

$tab0 = GUICtrlCreateTabItem("1")
GUICtrlSetState(-1, $GUI_SHOW) ; will be display first
GUICtrlCreateLabel("X", 30, 53, 50, 20)
GUICtrlCreateLabel("Y", 30, 103, 50, 20)
$tab0Start = GUICtrlCreateButton("Save and Start", 10, 150, 115, 20)
GUICtrlSetOnEvent(-1, "OKPressed")
$tab0Exit = GUICtrlCreateButton("Exit", 125, 150, 115, 20)
GUICtrlSetOnEvent(-1, "CancelPressed")
$tab01input = GUICtrlCreateInput("X", 80, 50, 90, 20)
$tab02input = GUICtrlCreateInput("Y", 80, 100, 90, 20)

GUICtrlCreateTabItem("") ; end tabitem definition
GUISetState()
$Acc = IniRead(@MyDocumentsDir & "\test.ini", "Enter", "X", "")
GUICtrlSetData($tab01input, $Acc)
$Pass = IniRead(@MyDocumentsDir & "\test.ini", "Enter", "Y", "")
GUICtrlSetData($tab02input, $Pass)

While 1
    Sleep(5000) ;Ждём 5 секунд
    If Not $iLoopIsPaused Then Write()
WEnd

Func Write()
    IniWrite(@MyDocumentsDir & "\test.ini", "Enter", "X", GUICtrlRead($tab01input))
    IniWrite(@MyDocumentsDir & "\test.ini", "Enter", "Y", GUICtrlRead($tab02input))

    $MHP = GUICtrlRead($tab1combo)

    Switch $MHP
        Case "70"
            IniWrite(@MyDocumentsDir & "\test.ini", "Pup", "HP", "70")
        Case "80"
            IniWrite(@MyDocumentsDir & "\test.ini", "Pup", "HP", "80")
        Case "90"
            IniWrite(@MyDocumentsDir & "\test.ini", "Pup", "HP", "90")
    EndSwitch

    $MHPex = GUICtrlRead($tab2combo)

    Switch $MHPex
        Case "20"
            IniWrite(@MyDocumentsDir & "\test.ini", "Pup", "HPex", "20")
        Case "30"
            IniWrite(@MyDocumentsDir & "\test.ini", "Pup", "HPex", "30")
        Case "40"
            IniWrite(@MyDocumentsDir & "\test.ini", "Pup", "HPex", "40")
    EndSwitch
EndFunc   ;==>Write

Func OKPressed()
    $iLoopIsPaused = True ;Это "сообщит" циклу что функцию Write() не нужно запускать

    ;Тут мы выполняем что нам нужно

    $iLoopIsPaused = False ;Тут мы как бы снова даём циклу "понять" что функцию Write() нужно запускать
EndFunc   ;==>OKPressed

Func CancelPressed()
    Exit
EndFunc   ;==>CancelPressed

Func SpecialEvents()
    Switch @GUI_CtrlId
        Case $GUI_EVENT_CLOSE
            Exit
        Case $GUI_EVENT_MINIMIZE

        Case $GUI_EVENT_RESTORE

    EndSwitch
EndFunc   ;==>SpecialEvents

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

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

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

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

Отправлено: 17:26, 05-09-2008 | #841



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

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


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


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

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


Я же говорю, 2 дня как разбираюсь с этим. Все приходит с опытом, а пока метлой пытаюсь рисовать пейзажи, образно выражаясь Спасибо за помощь!

Отправлено: 17:35, 05-09-2008 | #842


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

Ветеран


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

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


Creat0R
Цитата:
Нужно в самой функции проверять (но способ ещё зависит от режима OnEvent)
Спасибо за пример.
Я для себя эту проблему решил отлавливая сообщение $WM_COMMAND, очень удобно и быстро при плотных циклах

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


Отправлено: 17:37, 05-09-2008 | #843


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


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

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


Цитата Creat0R:
Func OKPressed()
$iLoopIsPaused = True ;Это "сообщит" циклу что функцию Write() не нужно запускать ;
Тут мы выполняем что нам нужно
$iLoopIsPaused = False ;Тут мы как бы снова даём циклу "понять" что функцию Write() нужно запускать
EndFunc ;==>OKPressed »
Дело в том, что внутрь функции этой кнопки нельзя вставить основной скрипт- там тоже имеется много функций и циклов...
Есть какой-нибудь способ именно прервать выполнение цикла на запись кнопкой "старт" и перейти на основной скрипт?

Отправлено: 17:56, 05-09-2008 | #844


Аватара для ganselo

Старожил


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

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


Что не так?:
Код: Выделить весь код
#include <GUIConstantsEx.au3>
#Include <Constants.au3>

Global $Stop = False

Opt("TrayAutoPause",0)
Opt("TrayMenuMode", 1)

;Создания диалогового окна
$GUI_Main = GUICreate ( "ProcessControl 1.0", 400, 230, 45, 45, -1 )
$CTRL_btn_stt = GUICtrlCreateButton ( "Start", 20, 155, 80, 23 )									;Кнопка Start
$CTRL_btn_stp = GUICtrlCreateButton ( "Stop", 110, 155, 80, 23 )									;Кнопка Stop
$CTRL_btn_ext = GUICtrlCreateButton ( "Exit", 200, 155, 80, 23 )									;Кнопка Exit
$CTRL_btr_tray = GUICtrlCreateButton ( "Minimizate", 290, 155, 80, 23)								;Кнопка Minimizate

GUICtrlCreatePic ( "resources\pic.bmp", 0, 0, 400, 72)

GUICtrlCreateLabel ( "Введите название процесса в формате *.exe, где * имя.", 30, 80, 350, -1)		;Текст

GUISetState(@SW_SHOW, $GUI_Main)

;Активация кнопки Start (функции ProcessControl)
While 1
	$msg2 = GUIGetMsg(1)
	Select
		
	Case $msg2[0] = $GUI_EVENT_CLOSE
		ExitLoop
	Case $msg2[0] = $CTRL_btn_ext
		Exit
	Case $msg2[0] = $CTRL_btn_stp
		$Stop = 15
	Case $msg2[0] = $CTRL_btn_stt
		ProcessControl()
		
	EndSelect
WEnd

Func ProcessControl()
    $i=ProcessWait("Explorer.exe")=0
    Do
        If $Stop = True Then
            $Stop = False
            ExitLoop
        EndIf

        $i=$i+1
        ProcessWait("Explorer.exe")
        ProcessClose("Explorer.exe")

        $PID = ProcessExists("Explorer.exe")
        If $PID Then
            ProcessClose ($PID)
        EndIf
    until $i=1111111
EndFunc

-------
К величайшему сожалению "история учит нас тому, что она ничему не учит".


Отправлено: 18:24, 05-09-2008 | #845


Аватара для Creat0R

Must AutoIt


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

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


Цитата Maza Faka:
Я для себя эту проблему решил отлавливая сообщение $WM_COMMAND »
Тоже вариант. Методов много, всё зависит от поставленной задачи.

Цитата Иск:
Есть какой-нибудь способ именно прервать выполнение цикла на запись кнопкой "старт" и перейти на основной скрипт? »
Я этот способ привёл в примере (проверка переменной которая меняется при входе в функцию), а что значит основной скрипт?

Цитата ganselo:
Что не так?: »
Полагаю проблема в том что функция снова и снова запускается?
См. мой пример .

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

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

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


Отправлено: 18:25, 05-09-2008 | #846


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


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

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


Ну, оболочка мне нужна для того что бы выбрать переменные, а потом уже основываясь на них выполняется работа дальше. переменные эти всегда одни и те-же, меняются во вкладках. Дальше скрипт уже использует то , что я выбрал конкретно в этот раз. Помнится, в школьные годи бейсик учил, там была команда GOTO, может и тут есть что-нить похожее, что бы перенаправило по нажатию кнопки дальше. Функцию внутрь функции же нельзя вставить, а у меня там и функции, и циклы дальше идут...Просто нажать на кнопку "ок" и продолжить выполнение.

Отправлено: 18:35, 05-09-2008 | #847


Аватара для Creat0R

Must AutoIt


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

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


Цитата Иск:
была команда GOTO, может и тут есть что-нить похожее »
И тут раньше оно было
Сейчас вместо этого используются циклы, условия, и функции.

Цитата Иск:
у меня там и функции, и циклы дальше идут »
А что мешает их поместить в главный цикл, он на то и предназначен

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

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

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


Отправлено: 20:04, 05-09-2008 | #848


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


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

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


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

Отправлено: 20:22, 05-09-2008 | #849


Аватара для Creat0R

Must AutoIt


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

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


Цитата Иск:
потом грузится еще одна программа »
Это другой скрипт?

Я если честно задрудняюсь понять проблему...
* В чём суть постоянной записи инфы в ini-файл?
* И что такое Fade.au3 в начале скрипта?

Может проще будет без режима OnEvent?
Типа такого:

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

GUICreate("Test", 250, 200, 0, 0)
GUISetBkColor(0xFFFFFF)

$tab = GUICtrlCreateTab(10, 10, 230, 180)

$tab2 = GUICtrlCreateTabItem("3")
GUICtrlCreateLabel("3", 30, 53, 130, 20)
$tab2combo = GUICtrlCreateCombo("", 170, 50, 60, 40)
GUICtrlSetData(-1, "40|30|20", "30") ; default 80%

$tab1 = GUICtrlCreateTabItem("2")
GUICtrlCreateLabel("2", 30, 53, 130, 20)
$tab1combo = GUICtrlCreateCombo("", 170, 50, 60, 40)
GUICtrlSetData(-1, "70|80|90", "90") ; default 80%
$MHP = GUICtrlRead($tab1combo)

$tab0 = GUICtrlCreateTabItem("1")
GUICtrlSetState(-1, $GUI_SHOW) ; will be display first
GUICtrlCreateLabel("X", 30, 53, 50, 20)
GUICtrlCreateLabel("Y", 30, 103, 50, 20)
$tab0Start = GUICtrlCreateButton("Save and Start", 10, 150, 115, 20)
$tab0Exit = GUICtrlCreateButton("Exit", 125, 150, 115, 20)
$tab01input = GUICtrlCreateInput("X", 80, 50, 90, 20)
$tab02input = GUICtrlCreateInput("Y", 80, 100, 90, 20)

GUICtrlCreateTabItem("") ; end tabitem definition

$Acc = IniRead(@MyDocumentsDir & "\test.ini", "Enter", "X", "")
GUICtrlSetData($tab01input, $Acc)
$Pass = IniRead(@MyDocumentsDir & "\test.ini", "Enter", "Y", "")
GUICtrlSetData($tab02input, $Pass)

GUISetState(@SW_SHOW)

AdlibEnable("Write", 5000) ;Это будет запускать функцию Write() каждые 5 сек.

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE, $tab0Exit
            Exit
        Case $tab0Start
            AdlibDisable() ;Отключаем временно запись данных
            Opt("GUIOnEventMode", 1) ;Это чтобы события не обрабатывались

            ;Тут мы выполняем что нам нужно, цикл при этом не будет выполняться
            ;Например цикл + Запуск функции

            $iCounter = 0
            $iRandom = Random(0, 100, 1)

            While $iCounter < 100
                $iCounter += 1
                ConsoleWrite($iCounter & @LF)

                Sleep(100)

                If $iCounter = $iRandom Then TempFunc($iCounter) ;Запуск функциии в случайном порядке :)
            WEnd

            AdlibEnable("Write", 5000) ;Включаем запись данных
            Opt("GUIOnEventMode", 0) ;Включаем обратно обработку событии
    EndSwitch
WEnd

Func Write()
    IniWrite(@MyDocumentsDir & "\test.ini", "Enter", "X", GUICtrlRead($tab01input))
    IniWrite(@MyDocumentsDir & "\test.ini", "Enter", "Y", GUICtrlRead($tab02input))

    $MHP = GUICtrlRead($tab1combo)

    Switch $MHP
        Case "70"
            IniWrite(@MyDocumentsDir & "\test.ini", "Pup", "HP", "70")
        Case "80"
            IniWrite(@MyDocumentsDir & "\test.ini", "Pup", "HP", "80")
        Case "90"
            IniWrite(@MyDocumentsDir & "\test.ini", "Pup", "HP", "90")
    EndSwitch

    $MHPex = GUICtrlRead($tab2combo)

    Switch $MHPex
        Case "20"
            IniWrite(@MyDocumentsDir & "\test.ini", "Pup", "HPex", "20")
        Case "30"
            IniWrite(@MyDocumentsDir & "\test.ini", "Pup", "HPex", "30")
        Case "40"
            IniWrite(@MyDocumentsDir & "\test.ini", "Pup", "HPex", "40")
    EndSwitch
EndFunc

Func TempFunc($iParam)
    ;Функция для примера
    MsgBox(64, "TempFunc()", "TempFunc() Вызов функции (" & $iParam & ")")
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

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

Отправлено: 22:06, 05-09-2008 | #850



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Вопрос - [Архив] Антивирусные программы - ОБЩИЕ ВОПРОСЫ FOX RED Защита компьютерных систем 67 21-11-2007 15:05
[Архив - Часть 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




 
Переход