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

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

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

(*.*)


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


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

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

 

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


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

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


Спасибо Maza Faka , но у меня опять грабли, и в связи с этим несколько вопросов, при выполнении твоего сценария когда $checksum <> 1111111111 происходит нажатие клавиши Z, но вот после когда область изменяется опять на $checksum <> 1111111111 не происходит нажатие клавиши Z, я имею ввиду что мне нужно что бы при каждом изменении области которая будет $checksum <> 1111111111 происходило нажатие Z(один раз) , а если значение становилось $checksum = 1111111111 тогда уже X(один раз), если опять $checksum = 1111111111 опять X и т.д

И еще вопрос можно ли добавить не одно значение - 1111111111, а еще 2222222222, 3333333333 и т.д, при появление которых будет выполнятся X.

Подскажите как такая функция будет выглядеть ??? Спасибо

P.s пытаюсь читать справку нехрена пока не понимаю

Отправлено: 08:17, 06-11-2007 | #691



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

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


Аватара для Creat0R

Must AutoIt


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

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


Рисуем смайлик

Код: Выделить весь код
$MsPaintPid = Run("mspaint")
ProcessWait($MsPaintPid)
WinActivate("[CLASS:MSPaintApp]")
WinWaitActive("[CLASS:MSPaintApp]")

BlockInput(1)
_MouseMoveCircle(220, 180, 100, 625, 1) ;Лицо
Sleep(200)
_MouseMoveCircle(180, 155, 100, 100, 1) ;Улыбка (кривая :D)
Sleep(400)
_MouseMoveCircle(175, 140, 20, 625, 1) ;Левый глаз
Sleep(20)
_MouseMoveCircle(260, 140, 20, 625, 1) ;Правый глаз
Sleep(400)
_MouseMoveCircle(182, 145, 10, 625, 1) ;Зрачёк левого глаза
Sleep(20)
_MouseMoveCircle(268, 145, 10, 625, 1) ;Зрачёк правого глаза
BlockInput(0)

Func _MouseMoveCircle($xPos, $yPos, $Radius, $TimeExp, $MouseClick=0); x coord, y coord, radius, time to loop (milliseconds)
    Local $TimeInit = TimerInit()
    Local $xPosMov, $yPosMov
    Local $MouseClick_Mark = 1

    Do
        $TimeDiff = TimerDiff($TimeInit)
        $xPosMov = $xPos + ($Radius * Sin($TimeDiff/100))
        $yPosMov = $yPos + ($Radius * Cos($TimeDiff/100))
        MouseMove($xPosMov, $yPosMov, 1)
        If $MouseClick_Mark = 1 And $MouseClick <> 0 Then MouseDown("Left")
        $MouseClick_Mark = 0
    Until $TimeDiff > $TimeExp
    If $MouseClick <> 0 Then MouseUp("Left")
EndFunc

P.S
Функция немного подправлена и в предыдущем моём примере, там переменная для отметки не сбрасывалась.

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

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

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:14, 06-11-2007 | #692


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

Ветеран


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

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


MaxxQ
Может во время работы скрипта ты нажимаешь клавишу Esc и скрипт завершает работу? Попробуй заменить клавишу Esc на какое нибудь сочетание клавиш, например:
Код: Выделить весь код
HotKeySet("^!a", "ExitFunc") ;Ctrl + Alt + a
К сожалению я не могу проверить работу скрипта с контрольной суммой пикселов, но можно немного изменить скрипт (принцип работы остаётся таким же) :
Код: Выделить весь код
HotKeySet("^!a", "ExitFunc")

$title = "Безымянный - Блокнот"

SendX()

Func SendX()
    While 1
        If WinExists($title) Then
            ConsoleWrite("X")
            ExitLoop
        EndIf
        Sleep(100)
    WEnd
    SendZ()
EndFunc

Func SendZ()
    While 1
        If Not WinExists($title) Then
            ConsoleWrite("Z")
            ExitLoop
        EndIf
        Sleep(100)
    WEnd
    SendX()
EndFunc

Func ExitFunc()
    Exit
EndFunc
В этом скрипте если существует окно с заголовком "Безымянный - Блокнот", то происходит запись символа X в консоль редактора (в данном случае SciTE), происходит выход из цикла и вызывается вторая функция, которая ожидает момента, когда окна с заголовком "Безымянный - Блокнот" не будет (закрыли), производит запись символа Z в консоль, после этого происходит выход из цикла и вызывается первая функция. И так до бесконечности.
Скрипт работает, значит должен работать и с вычислением контрольной суммы пикселов.

Цитата:
добавить не одно значение - 1111111111, а еще 2222222222, 3333333333 и т.д
Код: Выделить весь код
Func SendX()
    While 1
        $checksum = PixelChecksum(0,0, 50,50)
        Switch $checksum
        Case 1111111111
            Send("{x}")
            ExitLoop
        Case 2222222222
            Send("{x}")
            ExitLoop
        Case 3333333333
            Send("{x}")
            ExitLoop
        EndSwitch
        Sleep(100)
    WEnd
    SendZ()
EndFunc

Последний раз редактировалось Maza Faka, 06-11-2007 в 12:10.

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

Отправлено: 12:00, 06-11-2007 | #693


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

Ветеран


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

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


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

Dim $hour, $min, $sec

GUICreate("Test", 150, 70, -1, -1, $WS_CLIPSIBLINGS)
$label = GUICtrlCreateLabel("00:00:00", 50, 15, 100, 20)

$begin = TimerInit()
GUISetState()

AdlibEnable("SetTime", 500)

While GUIGetMsg() <> -3
    Sleep(10)
WEnd

Func SetTime()
    $time = _TicksToTime(Int(TimerDiff($begin)), $hour, $min, $sec)
    GUICtrlSetData($label, StringFormat("%02i:%02i:%02i", $hour, $min, $sec))
EndFunc
В коде указанном выше имеется такая проблемка, если нажать и удерживать левую кнопку мыши на заголовке окна, то таймер "замерзает" и не обновляется, пока левая кнопка мыши удерживается. Конечно можно обойти это задействовав UDF _DllCallBack:
Код: Выделить весь код
#include <GUIConstants.au3>
#include <Date.au3>
#include <DllCallBack.au3>

Global $sTimer, $Dll_Timer, $hour, $min, $sec

GUICreate("Test", 150, 70, -1, -1)
$label = GUICtrlCreateLabel("00:00:00", 50, 15, 100, 20)
$begin = TimerInit()

GUISetState()

Timer()

While 1
    Switch GUIGetMsg()
    Case -3
        _DllCallBack_Free($sTimer)
        DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "uint", $Dll_Timer)
        ExitLoop
    EndSwitch
WEnd

Func Timer()
    $sTimer = _DllCallBack("SetTime", "hwnd;uint;int;ptr")
    $Dll_Timer = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 500, "ptr", $sTimer)
    $Dll_Timer = $Dll_Timer[0]
EndFunc

Func SetTime($hWnd, $uiMsg, $idEvent, $dwTime)
    $time = _TicksToTime(Int(TimerDiff($begin)), $hour, $min, $sec)
    GUICtrlSetData($label, StringFormat("%02i:%02i:%02i", $hour, $min, $sec))
EndFunc
, но всё-таки хотелось бы узнать и о других вариантах (если они есть) решения этой проблемки.

Отправлено: 13:48, 06-11-2007 | #694


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


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

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


Спасибо Maza Faka что помогаешь разобраться (единственный кто помог)
ESC я не нажимал, сценарий не завершал работу а, а ждал пока область будет изменена с $checksum<> 1111111111 на $checksum = 1111111111, а если область опять изменялась с $checksum<> 1111111111 на $checksum<> 1111111111 нечего не происходит.


Вот по этому скрипту c блокнотом, получается что функция не может быть дважды подряд Z (как я понял) т.е дважды подряд блокнот не может быть закрыт (или чета я напутал?)

А у меня не известно когда придет нужная сумма пикселей при которой $checksum= 1111111111 (2222222222, 3333333333 и т.д.) и выполнится Send("{x}")(один раз) , если же сумма будет любой другой Send("{z}")(один раз) каждый раз при обновлении области.

Вообще скрипт нужен для игры в покер на префлопе(не знаю может я велосипед изобретаю?), но функции должны быть такие: при приходе на руки нужных карт AA, KK, QQ и т.д. сумму пикселей которых я знаю (и сам задаю в скрипте, 1111111111, 222222222, 3333333333 и т.д., вообще их будет около 132) происходит нажатие X , а при появлении 29, 48,73 и т.д. где естественно $checksum <> 1111111111, нажатие Z. Все бы хорошо, но в данном скрипте не реализована функция где при каждом обновлении области на $checksum <> 1111111111 происходило бы Send("{z}") (один раз) дважды подряд, трижды и так до бесконечности , ведь неизвестно когда придут карты где $checksum= 1111111111.
Возможно ли это вообще реализовать? и как?? ПОМОГИТЕ

Отправлено: 16:29, 06-11-2007 | #695


Аватара для Creat0R

Must AutoIt


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

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


Maza Faka,
Цитата:
хотелось бы узнать и о других вариантах
Я уже поднимал подобный вопрос (когда ещё библиотеки DllCallBack не было ), amel27 привёл пару хороших примеров).

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

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

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

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

Отправлено: 16:58, 06-11-2007 | #696


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

Ветеран


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

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


MaxxQ
Пробуй:
Код: Выделить весь код
#include <Array.au3>

HotKeySet("{Esc}", "OnExit")

Global $CardArray[133]
Dim $new_checksum = PixelChecksum(0,0, 50,50)

$CardArray[0] = 132
$CardArray[1] = 1111111111
$CardArray[2] = 2222222222
$CardArray[3] = 3333333333
; И так далее, либо выложи формулу по которой происходит увеличение суммы, тогда можно будет сделать в цикле ;-)

While 1
    $checksum = PixelChecksum(0, 0, 50, 50)
    If $checksum <> $new_checksum Then
        _ArraySearch($CardArray, $checksum, 1)
        If @error Then
            Send("{z}")
        Else
            Send("{x}")
        EndIf
        $new_checksum = PixelChecksum(0,0, 50,50)
    EndIf
    Sleep(100)
WEnd

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

Отправлено: 08:32, 07-11-2007 | #697


Аватара для infinity78

Ветеран


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

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


http://creator-lab.ucoz.ru/AutoIt/Au...oGenerator.zip (34 Kb) - Записывает в реальном времени действия пользователя в AutoIt код.
http://creator-lab.ucoz.ru/AutoIt/ScriptWriter.zip (78 Kb) - Аналог AutoItMacroGenerator.
http://creator-lab.ucoz.ru/AutoIt/API_Help_Rus.zip Русский справочник по API-функциям
http://creator-lab.ucoz.ru/AutoIt/Koda.zip (724 Kb) - Визуализация работы с GUI - аналог Visual Basic.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:11, 07-11-2007 | #698


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


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

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


ЗАРАБОТАЛА, СПАСИБО Maza Faka

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


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


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

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


Цитата infinity78:
http://creator-lab.ucoz.ru/AutoIt/Au...oGenerator.zip (34 Kb) - Записывает в реальном времени действия пользователя в AutoIt код.
http://creator-lab.ucoz.ru/AutoIt/ScriptWriter.zip (78 Kb) - Аналог AutoItMacroGenerator.
http://creator-lab.ucoz.ru/AutoIt/API_Help_Rus.zip Русский справочник по API-функциям
http://creator-lab.ucoz.ru/AutoIt/Koda.zip (724 Kb) - Визуализация работы с GUI - аналог Visual Basic. »
полезные проги, спасибо

Отправлено: 22:06, 08-11-2007 | #700



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




 
Переход