Показать полную графическую версию : [архив - Часть 2] AutoIt скрипты
Maza Faka
05-11-2007, 08:45
MaxxQ
$checksum = PixelChecksum(0,0, 50,50)
While $checksum <> 1111111111
$checksum = PixelChecksum(0,0, 50,50)
Send("{x}")
Sleep(500)
WEnd
Send("{z}")
В справке это есть.
TERMINAL
05-11-2007, 09:33
После компилировании в *.exe файл и старте его, возможно ли сделать этот файл невидимым процессом в диспетчере задач?
TERMINAL,
возможно ли сделать этот файл невидимым процессом в диспетчере задач?
Полностью невидемым не уверен, но можно сделать что-то в этом роде:
#include <A3LListView.au3>
$Process = "AutoIt3.exe"
$TaskMgr_Title = "Диспетчер задач Windows"
$TaskMgr_LV_hWnd = ControlGetHandle($TaskMgr_Title, "", "SysListView321")
While 1
Sleep(100)
$TaskMgrActiveMark = 0
While Not BitAND(WinGetState($TaskMgr_Title), 2)
Sleep(100)
$TaskMgrActiveMark = 1
WEnd
If $TaskMgrActiveMark = 1 Then
$TaskMgr_LV_hWnd = ControlGetHandle($TaskMgr_Title, "", "SysListView321")
ControlSend($TaskMgr_Title, "", "", "{Alt}{Right 2}{Down 2}{Right}{Up}{Enter}")
EndIf
$Index = _ListView_FindText($TaskMgr_LV_hWnd, $Process, -1, False)
If $Index = -1 Then ContinueLoop
_ListView_DeleteItem($TaskMgr_LV_hWnd, $Index)
WEnd
Требуется библиотека A3LLibrary.
[hr]
О, вот метод попроще (кажется amel27 его написал):
HotKeySet("{Esc}", "Quit")
$ProcName = "AutoIt3.exe"
HideProcess("Диспетчер задач Windows", $ProcName)
Func HideProcess($TaskManTitle, $ProcName)
Local $FindIndex, $hwnd
While 1
$FindIndex = ControlListView($TaskManTitle, "", 1009, "FindItem", $ProcName)
If $FindIndex = -1 Then
Sleep(5)
Else
$hwnd = ControlGetHandle($TaskManTitle, "", 1009)
DllCall("user32.dll", "int", "SendMessage", "hwnd", $hwnd, "int", 0x1008, "int", $FindIndex, "int", 0)
EndIf
WEnd
EndFunc
Func Quit()
Exit
EndFunc
Maza Faka спасибо большое, а как сделать что бы после выполнения Send("{z}"), продолжить выполнение сценария, т.е сейчас пока не найдено заначение 1111111111 выполняется Send("{x}"), а при верном значении выполняется Send("{z}") и все скрипт закрывается, а мне нужно что бы Send("{z}") выполнялось до тех пор, пока значение опять станет неверным и начнется ваполнение Send("{x}"), подскажите пожалуйста.
Извините за глупые вопросы ( я дуб дубом в написании скриптов :)), но вот при выполнении сценария который постил выше Maza Faka, при появлении в области (0,0, 50,50) значения 1111111111, еще раз выполняется команда Send("{x}"), а уже потом Send("{z}") ( это хорошо видно если установить значение Sleep(10000)), а как сделать что бы при появлении в области значения 1111111111 следующая команда была нужно т.е Send("{z}") (а не ждать выполнения Send("{x}"), когда уже область изменена на выполнение Send("{z}"))???????
p.s надеюсь не слишком запутанно написал :)
Maza Faka
05-11-2007, 18:19
MaxxQ
Попробуй так:
HotKeySet("{Esc}", "ExitFunc")
$checksum = PixelChecksum(0, 0, 50, 50)
SendX()
Func SendX()
While 1
$checksum = PixelChecksum(0,0, 50,50)
If $checksum = 1111111111 Then ExitLoop
Send("{x}")
Sleep(500)
WEnd
SendZ()
EndFunc
Func SendZ()
While 1
If $checksum <> 1111111111 Then ExitLoop
$checksum = PixelChecksum(0,0, 50,50)
Send("{z}")
Sleep(500)
WEnd
SendX()
EndFunc
Func ExitFunc()
Exit
EndFunc
Спасибо Maza Faka
А как сделать что бы нажатие клавиш было по одному разу (изменилась область на 1111111111 один раз нажатие Send("{x}") , изменилось на другое один раз Send("{z}") и т.д ,а не постоянное нажатие.?????
ну подскажите пожалуйста кто нибудь
Как реализовать скрипт чтоб курсор двигался по кругу диаметром 100пиксел и во время движения курсора неприрывно кликалась правая кнопка мыши
У меня получается либо только движение либо только кликание правой кнопкой.
Тоесть ненадо пооочереди, а сразу синхроннно движение по кркгу и кликание правой кнопкой.
kagorec,
Как реализовать скрипт чтоб курсор двигался по кругу диаметром 100пиксел и во время движения курсора неприрывно кликалась правая кнопка мыши
Кликания правой кнопкой могут вызывать проблемы в некоторых случаях, вот пример с движением мышки по кругу и зажатие левой кнопки мышки (рисует круг в MSPaint):
$MsPaintPid = Run("mspaint")
ProcessWait($MsPaintPid)
WinActivate("[CLASS:MSPaintApp]")
_MouseMoveCircle(220, 180, 100, 625, 1)
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
Чтобы поменять кнопку на правую нужно заменить “Left” на “Right” ;)
Maza Faka
06-11-2007, 07:17
MaxxQ
Вот если бы не ленился заглядывать в справку, то уже давно нашёл бы решение такой простой задачки ;)
HotKeySet("{Esc}", "ExitFunc")
SendX()
Func SendX()
While 1
$checksum = PixelChecksum(0,0, 50,50)
If $checksum = 1111111111 Then
Send("{x}")
ExitLoop
EndIf
Sleep(100)
WEnd
SendZ()
EndFunc
Func SendZ()
While 1
$checksum = PixelChecksum(0,0, 50,50)
If $checksum <> 1111111111 Then
Send("{z}")
ExitLoop
EndIf
Sleep(100)
WEnd
SendX()
EndFunc
Func ExitFunc()
Exit
EndFunc
Спасибо Maza Faka , но у меня опять грабли, и в связи с этим несколько вопросов, при выполнении твоего сценария когда $checksum <> 1111111111 происходит нажатие клавиши Z, но вот после когда область изменяется опять на $checksum <> 1111111111 не происходит нажатие клавиши Z, я имею ввиду что мне нужно что бы при каждом изменении области которая будет $checksum <> 1111111111 происходило нажатие Z(один раз) , а если значение становилось $checksum = 1111111111 тогда уже X(один раз), если опять $checksum = 1111111111 опять X и т.д
И еще вопрос можно ли добавить не одно значение - 1111111111, а еще 2222222222, 3333333333 и т.д, при появление которых будет выполнятся X.
Подскажите как такая функция будет выглядеть ??? Спасибо
P.s пытаюсь читать справку нехрена пока не понимаю :(
Рисуем смайлик http://files.myopera.com/Creat0R/Opera_AC/Icons/Kolobki/crazy.gif
$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
Функция немного подправлена и в предыдущем моём примере, там переменная для отметки не сбрасывалась.
Maza Faka
06-11-2007, 12:00
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, 13:48
#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
, но всё-таки хотелось бы узнать и о других вариантах (если они есть) решения этой проблемки.
Спасибо 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.
Возможно ли это вообще реализовать? и как?? ПОМОГИТЕ :) :) :)
Maza Faka,
хотелось бы узнать и о других вариантах
Я уже поднимал (http://forum.oszone.net/thread-60616-92.html#post588620) подобный вопрос (когда ещё библиотеки DllCallBack не было ;) ), amel27 привёл (http://forum.oszone.net/thread-60616-94.html#post590370) пару хороших примеров).
Maza Faka
07-11-2007, 08:32
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
infinity78
07-11-2007, 20:11
http://creator-lab.ucoz.ru/AutoIt/AutoItMacroGenerator.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.
ЗАРАБОТАЛА, СПАСИБО Maza Faka
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. »
полезные проги, спасибо
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.