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

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

 

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


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

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


А можно при помощи AutoIt запускать/останавливать службы Windows?

Отправлено: 23:52, 14-09-2008 | #891



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

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


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

Ветеран


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

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


FunkyByte
Пример:
Код: Выделить весь код
Run(@ComSpec & ' /c net stop "Диспетчер очереди печати"', @SystemDir, @SW_HIDE) ;останавливаем службу
Run(@ComSpec & ' /c net start "Диспетчер очереди печати"', @SystemDir, @SW_HIDE) ;запускаем службу

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

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

Отправлено: 07:36, 15-09-2008 | #892


Googler


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

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


FunkyByte

...или через WMI:
Код: Выделить весь код
Func _ServiceStart($sService, $sComputer = "localhost")
  Local $objWMI = ObjGet("winmgmts:\\" & $sComputer & "\root\cimv2")
  Local $sQuery = "Select * From Win32_Service Where Name Like '"& $sService &"'"
  Local $iRet, $colItems = $objWMI.ExecQuery($sQuery)
  For $objService In $colItems
    If $objService.State = "Stopped" Then
        $iRet = $objService.StartService($objService.Name)
        If $iRet=0 Then Return True
    ElseIf $objService.State = "Running" Then
        Return True
    EndIf
  Next
  Return False
EndFunc

Func _ServiceStop($sService, $sComputer = "localhost")
  Local $objWMI = ObjGet("winmgmts:\\" & $sComputer & "\root\cimv2")
  Local $sQuery = "Select * From Win32_Service Where Name Like '"& $sService &"'"
  Local $iRet, $colItems = $objWMI.ExecQuery($sQuery)
  For $objService In $colItems
    If $objService.State = "Running" Then
        $iRet = $objService.StopService($objService.Name)
        If $iRet=0 Then Return True
    ElseIf $objService.State = "Stopped" Then
        Return True
    EndIf
  Next
  Return False
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:39, 15-09-2008 | #893


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


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

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


Спасибо. Помогло.

Отправлено: 10:22, 15-09-2008 | #894


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


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

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


Встала такая проблемка:
Есть 3 файла, называются они lico, func_1, func_2, код простой, так для примера:

lico.au3
посмотреть

PHP код: Выделить весь код

#include <GUIConstantsEx.au3>



HotKeySet("{ESC}","term")

GUICreate(""1000700)

$label_for_func_1 GUICtrlCreateLabel("Sost func_1 ",10,10,60,20)
$label_for_func_2 GUICtrlCreateLabel("Sost func_2 ",10,50,60,20)

$input_for_func_1 GUICtrlCreateInput("0",100,10,60,20)
$input_for_func_2 GUICtrlCreateInput("0",100,50,60,20)

$button_for_func GUICtrlCreateButton("Turn on func_1 and 2",170,50,150,20)

$label_from_func_1 GUICtrlCreateLabel("",350,10,100,20)
$label_from_func_2 GUICtrlCreateLabel("",350,50,100,20)

GUISetState()
 
While 
1
         $msg 
GUIGetMsg()
         
Select
            
Case $msg $GUI_EVENT_CLOSE
                 
Exit

            Case 
$msg $button_for_func
;                    #include <func two.au3>
;                    #include <func one.au3>
;                    ShellExecute("func one.exe","","","open")
;                    
ShellExecute("func two.exe","","","open")
         
EndSelect
WEnd 
     
 
func term
()
     Exit
 
EndFunc 



func_1.au3
посмотреть


PHP код: Выделить весь код

while 1


if GUICtrlRead($input_for_func_1) = 1 then
    GUICtrlSetData
($label_from_func_1"1-я задержка 5 с.")
    
sleep(5000)    
    
GUICtrlSetData($label_from_func_1"2-я задержка 2 с.")
    
sleep(2000)
    
GUICtrlSetData($label_from_func_1"сост. 1")
Else
    
GUICtrlSetData($label_from_func_1"сост. 0")
EndIf
wend 



func_2.au3
посмотреть

PHP код: Выделить весь код

while 
if GUICtrlRead($input_for_func_2) = 1 then
    GUICtrlSetData
($label_from_func_2"Задержка 10 с.")
    
sleep(10000)
    
GUICtrlSetData($label_from_func_2"Сост. 1")
Else
    
GUICtrlSetData($label_from_func_2"Сост. 0")
EndIf
wend 


Смысл работы, как только я нажимаю кнопочку $button_for_func, два файлика func_1, func_2 должны запуститься и висеть в памяти и смотреть, что вписано в $input_for_func_1, $input_for_func_2 и в зависимости от того, что в них вписано выполнять те или иные предписания.

Вроде просто, как мне казалось, а может оно так и есть, я может чего то недопонимаю.

Что я делал, написал событие для кнопки $button_for_func сперва такое: #include <func_1.au3>, #include <func_2.au3>, даже заработало, правда только первый файл, ну тут ясно почему из-за бесконечного цикла...
далее переправил на shellExecute("func_1.exe","","","open"), ShellExecute("func_2.exe","","","open"), нажал на кнопочку все туже и сразу же словил ошибку, переменные без объявления, хотя файлы просто были скомпилированы и в них я ничего не менял!
я попробовал вообще через одно м..то сделать, создал ini и туда записывал, что считывал с $input_for_func_1, $input_for_func_2, а потом файлики func_2 и func_1 считывали из это ini делали, что нужно, записывали в эту же ini далее файл lico считывал из ini что ему пришло и вписывал эти данные куда надо.
Это муторно и медленно работало.

Такая проблема возникла из за того, что func_1 и func_2 реализуют алгоритм работы 2-х устройств, каждое устройство имеет свой алгоритм, свои задерки и так далее, вот и понадобилось создавать отдельные файлы.

Подскажите, как все таки реализовать смысл работы?
Спасибо.

Последний раз редактировалось HORRIBLE, 16-09-2008 в 18:10.


Отправлено: 17:59, 16-09-2008 | #895


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


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

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


HORRIBLE, всё просто, на мой взгляд у Вас геморный метод, но какой есть)

Вам нужно лишь добавить в каждую функцию (func_1.au3 и func_2.au3) объявления переменных
func_1.au3 :
Dim $input_for_func_1, $label_from_func_1

В func_2.au3 :
Dim $input_for_func_2, $label_from_func_2

Также советую добавить в func_1.au3 и func_2.au3 такие строчки, только с разными символами, при повторном нажатии на кнопку запуска 2-х ехе программа будет выдавать сообщение о том, что такие процессы уже запущены

if _Singleton("Символы характеризующие первую функцию",1) = 0 Then
MsgBox(16, "Ошибка!", "Программа уже запущена.")
Exit
EndIf

и немного переделать основной скрипт, так будет удобнее, если в основном цикле Вы будете что-то делать:

#include <GUIConstantsEx.au3>
HotKeySet("{ESC}","term")
GUICreate("fgfgfgfgfgfgfgfg", 350, 150)
$label_for_func_1 = GUICtrlCreateLabel("Sost func_1 ",10,10,60,20)
$label_for_func_2 = GUICtrlCreateLabel("Sost func_2 ",10,50,60,20)
$input_for_func_1 = GUICtrlCreateInput("0",100,10,60,20)
$input_for_func_2 = GUICtrlCreateInput("0",100,50,60,20)
$button_for_func = GUICtrlCreateButton("Turn on func_1 and 2",170,50,150,20)
$label_from_func_1 = GUICtrlCreateLabel("",350,10,100,20)
$label_from_func_2 = GUICtrlCreateLabel("",350,50,100,20)
GUISetState()

Opt("GUIOnEventMode", 1) ; Change to OnEvent mode
GUISetOnEvent($GUI_EVENT_CLOSE, "term")
GUICtrlSetOnEvent($button_for_func, "F1")
; таким образом, действия будут происходить лишь при нажатии на кнопки, получается что основной цикл свободен
While 1
WEnd

Func F1()
Run("func_1.exe", "")
Run("func_2.exe", "")
EndFunc

Func term()
Exit
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:22, 16-09-2008 | #896


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


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

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


Рысь, увы, но непомогло ( добавление объявки переменных спасло лишь от ошибки, но не более.
Но за изменение кода спасибо.

Отправлено: 21:49, 16-09-2008 | #897


Аватара для Creat0R

Must AutoIt


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

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


Цитата HORRIBLE:
Смысл работы, как только я нажимаю кнопочку $button_for_func, два файлика func_1, func_2 должны запуститься и висеть в памяти и смотреть, что вписано в $input_for_func_1, $input_for_func_2 и в зависимости от того, что в них вписано выполнять те или иные предписания. »
Только немного непонятно, зачем 2 дополнительных файла тут? В любом случае, чуть ниже три файла, и ещё один, в которм совмещаются все три:

Lico.au3

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

HotKeySet("{ESC}", "Term")

GUICreate("My App", 1000, 700)

$Label_for_func_1 = GUICtrlCreateLabel("Sost func_1 ", 10, 10, 80, 20)
$Label_for_func_2 = GUICtrlCreateLabel("Sost func_2 ", 10, 50, 80, 20)

$Input_for_func_1 = GUICtrlCreateInput("0", 100, 10, 60, 20)
$Input_for_func_2 = GUICtrlCreateInput("0", 100, 50, 60, 20)

$Button_for_func = GUICtrlCreateButton("Turn on func_1 and 2", 170, 50, 150, 20)

$Label_from_func_1 = GUICtrlCreateLabel("", 350, 10, 100, 20)
$Label_from_func_2 = GUICtrlCreateLabel("", 350, 50, 100, 20)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button_for_func
            Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @ScriptDir & '\Func_1.au3"', @ScriptDir)
            Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @ScriptDir & '\Func_2.au3"', @ScriptDir)
    EndSwitch
WEnd

Func Term()
    Exit
EndFunc

Func_1.au3

Код: Выделить весь код
#NoTrayIcon
$sTitle = "[CLASS:AutoIt v3 GUI;TITLE:My App]"

While 1
    $sInput1_Text = ControlGetText($sTitle, "", "Edit1")

    If $sInput1_Text = 1 Then
        ControlSetText($sTitle, "", "Static3", "1-я задержка 5 с.")
        Sleep(5000)
        ControlSetText($sTitle, "", "Static3", "2-я задержка 2 с.")
        Sleep(2000)
        ControlSetText($sTitle, "", "Static3", "сост. 1")
    Else
        ControlSetText($sTitle, "", "Static3", "сост. 0")
    EndIf

    Sleep(100)
WEnd

Func_2.au3

Код: Выделить весь код
$sTitle = "[CLASS:AutoIt v3 GUI;TITLE:My App]"

While 1
    $sInput2_Text = ControlGetText($sTitle, "", "Edit2")

    If $sInput2_Text = 1 Then
        ControlSetText($sTitle, "", "Static4", "Задержка 10 с.")
        Sleep(10000)
        ControlSetText($sTitle, "", "Static4", "Сост. 1")
    Else
        ControlSetText($sTitle, "", "Static4", "Сост. 0")
    EndIf

    Sleep(100)
WEnd



Lico_All.au3

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

Opt("GUIOnEventMode", 1)
HotKeySet("{ESC}", "_Quit")

Global $iCheckInputs = False
Global $iTimer_1 = -1, $iTimer_2 = -1, $iTimer_3 = -1

$hGUI = GUICreate("My App", 1000, 700)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Main_Events")

$Label_for_func_1 = GUICtrlCreateLabel("Sost func_1 ", 10, 10, 80, 20)
$Label_for_func_2 = GUICtrlCreateLabel("Sost func_2 ", 10, 50, 80, 20)

$Input_for_func_1 = GUICtrlCreateInput("0", 100, 10, 60, 20)
$Input_for_func_2 = GUICtrlCreateInput("0", 100, 50, 60, 20)

$Button_for_func = GUICtrlCreateButton("Turn on func_1 and 2", 170, 50, 150, 20)
GUICtrlSetOnEvent(-1, "_Main_Events")

$Label_from_func_1 = GUICtrlCreateLabel("", 350, 10, 100, 20)
$Label_from_func_2 = GUICtrlCreateLabel("", 350, 50, 100, 20)

GUISetState()

While 1
    _CheckInputs()
    Sleep(1000)
WEnd

Func _Main_Events()
    Switch @GUI_CtrlId
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button_for_func
            $iCheckInputs = Not $iCheckInputs
    EndSwitch
EndFunc

Func _CheckInputs()
    If Not $iCheckInputs Then Return

    ;Func_1.au3
    If GUICtrlRead($Input_for_func_1) = 1 Then
        If $iTimer_1 = -1 Then
            GUICtrlSetData($Label_from_func_1, "1-я задержка 5 с.")
            $iTimer_1 = TimerInit()
        EndIf

        If TimerDiff($iTimer_1) > 5000 Then
            If $iTimer_2 = -1 Then
                GUICtrlSetData($Label_from_func_1, "2-я задержка 2 с.")
                $iTimer_2 = TimerInit()
            EndIf

            If TimerDiff($iTimer_2) > 2000 Then GUICtrlSetData($Label_from_func_1, "сост. 1")

            If TimerDiff($iTimer_1) > 5000 And TimerDiff($iTimer_2) > 2000 Then
                $iTimer_1 = -1
                $iTimer_2 = -1
            EndIf
        EndIf
    Else
        GUICtrlSetData($Label_from_func_1, "сост. 0")
    EndIf

    ;Func_2.au3
    If GUICtrlRead($Input_for_func_2) = 1 Then
        If $iTimer_3 = -1 Then
            GUICtrlSetData($Label_from_func_2, "Задержка 10 с.")
            $iTimer_3 = TimerInit()
        EndIf

        If TimerDiff($iTimer_3) > 10000 Then
            GUICtrlSetData($Label_from_func_2, "Сост. 1")
            $iTimer_3 = -1
        EndIf
    Else
        GUICtrlSetData($Label_from_func_2, "Сост. 0")
    EndIf
EndFunc

Func _Quit()
    Exit
EndFunc


Цитата Рысь:
как окрашивать код в цвета Автоита при посте на форуме? »
См. утилиту Au3ToPost .

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

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

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

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

Отправлено: 01:34, 17-09-2008 | #898


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


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

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


Creat0R, еще 2-ва файлика появились из-за незнания,т.к. я не знал как сделать, чтобы команды вополняли с задержкой без использования sleep, конечно догадывался, что наверно можно, даже срашивал тут про таймер в милисекундах, но дальше неполучилось продвинуться, опять таки из-за незнания ).

Отправлено: 14:55, 17-09-2008 | #899


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


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

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


Мужики , кто знает как послать Chr(0x00) через функцию CommSendString и что бы AUTOIT оптеделяла что это "0"?

Отправлено: 11:28, 18-09-2008 | #900



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




 
Переход