Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pytanie] Prosty Key Clicker W Autoit


Rekomendowane odpowiedzi

Opublikowano

Witam

w programowaniu AutoIT jestem zielony (preferuje php :P), a chciałbym się troche poduczyć

mianowicie - potrzebuje żeby ktoś podsunął mi kilka linijek kodu żeby wyglądało to tak:

 

Początek pętli

 

Wciskanie klawisza $ przez # sekund

przerwa % sekund

Wciskanie klawisza * przez & sekund

Przerwa % sekund

 

Koniec pętli

 

z góry dziękuje, i prosze i wyrozumiałość

Opublikowano
Case $buttonstart
send("klawisz")
sleep(co ile sekund)

regl.png

Tak userzy MPC dbają o regulamin! ^^

Co kryje spoiler?

 

Jeszcze troszke!

Zaraz będzie koniec.

Żartuje!

Prawie już prawie!

iiii....

Chciało Ci się klikać? o_O

 

 

 

 

 

 

Opublikowano

1000 - sekunda.

Co X sekund będzie się powtarzać - zależy ile podasz.

regl.png

Tak userzy MPC dbają o regulamin! ^^

Co kryje spoiler?

 

Jeszcze troszke!

Zaraz będzie koniec.

Żartuje!

Prawie już prawie!

iiii....

Chciało Ci się klikać? o_O

 

 

 

 

 

 

Opublikowano

W sumie - tak.

Pamiętaj o wyłączeniu na czerwony X oraz buttonie $buttonstart, który będzie uruchamiał bota.

ewentualnie zrób hotkeye.

regl.png

Tak userzy MPC dbają o regulamin! ^^

Co kryje spoiler?

 

Jeszcze troszke!

Zaraz będzie koniec.

Żartuje!

Prawie już prawie!

iiii....

Chciało Ci się klikać? o_O

 

 

 

 

 

 

Opublikowano

będzie źle x2

po pierwsze co to za "Case" wyrwane z kosmosu?

po drugie: w botach typu klikacz nie daje się guzików "start" bo może dojść do sytuacji ze zrobi "sam z sobą" pętle.

i nie chodzi tu nawet o klikanie myszą po guziku tylko samymi klawiszami.

 

 

to co chcesz zrobić można napisać na kilka sposobów.

np:

 

1. najprostsze

 

co sekundę klika "1"

#include <GUIConstantsEx.au3>

HotKeySet("{F6}", "Praca")
HotKeySet("{F7}", "Pauza")
GUICreate("klikanie 1", 200, 200)
GUICtrlCreateLabel("F6 start" & @CR &"F7 stop" & @cr & "co sekunde klika 1", 10, 10, 180, 50)

GUISetState(@SW_SHOW)

Pauza()

func Pauza()
While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
endfunc

func Praca()
while 1
	send("1")		
	sleep(1000)
wend
endfunc

 

 

2. niestety klawisz 1 jest przytrzymany tylko ułamek czasu.

jeśli chcemy żeby trwało to dłużej dajemy dodatkowe parametry

 

np takie:

Opt ("SendKeyDelay", 25 )

Opt ("SendKeyDownDelay", 60 )

Opt ("MouseClickDownDelay", 10)

Opt("MouseClickDelay", 25)

Opt("MouseClickDragDelay", 10)

 

każdy jest od czegoś innego (2 od klawiatury i 3 od myszy), sam sprawdź w helpie od czego i wybierz jaki ci potrzebny.

 

parametry z reguły daje sie na początku bota, ale niektórzy dopisują przed każdą funkcją send

 

czyli wyglądać to moze np tak

#include <GUIConstantsEx.au3>

Opt ("SendKeyDownDelay", 1000)

HotKeySet("{F6}", "Praca")
HotKeySet("{F7}", "Pauza")
GUICreate("klikanie 1", 200, 200)
GUICtrlCreateLabel("F6 start" & @CR &"F7 stop" & @cr & "co sekunde klika 1", 10, 10, 180, 50)

GUISetState(@SW_SHOW)

Pauza()

func Pauza()
While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
endfunc

func Praca()
while 1
	send("1")		
	sleep(1000)
wend
endfunc

 

 

3. inną metodą bardziej estetyczną i chyba nawet bardziej prawidłowa jest danie przyrostka up / down

 

czyli:

 

#include <GUIConstantsEx.au3>

HotKeySet("{F6}", "Praca")
HotKeySet("{F7}", "Pauza")
GUICreate("klikanie 1", 200, 200)
GUICtrlCreateLabel("F6 start" & @CR &"F7 stop" & @cr & "co sekunde klika 1", 10, 10, 180, 50)

GUISetState(@SW_SHOW)

Pauza()

func Pauza()
While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
endfunc

func Praca()
while 1
	send("{1 down}")
	sleep(1000)
	send("{1 up}")
	sleep(1000)
wend
endfunc

 

 

4. w pewnych specyficznych sytuacjach kiedy klawisz "1" na być przytrzymany "dłużej" a chcemy aby bot nie marnował tego czasu tylko wykonywał inna prace można założyć timer

 

czyli:

 

#include <GUIConstantsEx.au3>

HotKeySet("{F6}", "Praca")
HotKeySet("{F7}", "Pauza")
GUICreate("klikanie 1", 200, 200)
GUICtrlCreateLabel("F6 start" & @CR &"F7 stop" & @cr & "co sekunde klika 1", 10, 10, 180, 50)

GUISetState(@SW_SHOW)

Pauza()

func Pauza()
While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
endfunc

func Praca()
while 1
	send("{1 down}")
	$timer = TimerInit()
	do
		;tu mozesz dopisac dodatkowy kod wykonywany podczas tej pauzy
	until timerdiff($timer)>1000
	send("{1 up}")
	sleep(1000)
wend
endfunc

 

 

przykład na czwarty przykład masz na przykład w tym bocie tu:

 

http://www.mpcforum.pl/topic/108841-pomoc-z-autoit/

 

5 post*

Opublikowano

do 4 przykładu, bo chyba będzie najodpowiedniejszy dla mnie;

co jeśli po jakimś czasie chciałbym żeby zaczął inną pętle, a potem wrócił do poprzedniej? i tak co jakiś określony czas?

 

 

edit;

ok już działa na 90% jak chciałem, tutaj jest kod:

#include <GUIConstantsEx.au3>

HotKeySet("{F6}", "Praca")
HotKeySet("{F7}", "Pauza")
GUICreate("Auto splash", 200, 200)
GUICtrlCreateLabel("F6 = start" & @CR &"F7 = stop" & @cr & "Auto splash", 10, 10, 180, 50)

GUISetState(@SW_SHOW)



Pauza()

func Pauza()
       While 1
               $Msg = GUIGetMsg()
               Switch $Msg
                       Case $GUI_EVENT_CLOSE
                               Exit
               EndSwitch
       WEnd
endfunc

func Praca()
       while 1
		WinWaitActive("KalOnline GBL[:KalOnline GBL]")
               send("{4 down}")
               $timer = TimerInit()
			Do
               until timerdiff($timer)>1000
               send("{4 up}")
               sleep(4000)

			send("{4 down}")
               $timer = TimerInit()
			Do
			until timerdiff($timer)>1000
               send("{4 up}")
               sleep(700)

			send("{6 down}")
               $timer = TimerInit()
               Do
			until timerdiff($timer)>1000
               send("{6 up}")
               sleep(600)

			wend
endfunc

 

teraz chciałbym się dowiedzieć czy można jakoś to skrócić?

oraz chciałbym żeby przy WinWaitActive, gdy okno nie jest aktywne wyskakiwał mi msg box z jakimś tam tekstem, da rade tak? i jeszcze żeby

działał w tym oknie

Opublikowano

na co ci te timery jak miedzy nimi nie jest wykonywany żaden kod?

niepotrzebnie tylko zamulasz skrypt.

 

interaval robi sie np w ten sposób:

 

1. np oparty o czas (co 5 sek klika 2)

#include <GUIConstantsEx.au3>

HotKeySet("{F6}", "Praca")
HotKeySet("{F7}", "Pauza")
GUICreate("klikanie 1", 200, 200)
GUICtrlCreateLabel("F6 start" & @CR &"F7 stop" & @cr & "co sekunde klika 1", 10, 10, 180, 50)

GUISetState(@SW_SHOW)

Pauza()

func Pauza()
While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
endfunc


func Praca()
$timer = TimerInit()
while 1
	send("{1 down}")
	sleep(1000)
	send("{1 up}")
	sleep(1000)

	if timerdiff($timer)>5000 Then
		Interval()
		$timer = TimerInit()
	endif
wend
endfunc


func Interval()
send("2")
endfunc

 

 

albo tak

pętla wewnątrz pętli (co 6 cykli sie "konczy")

 

#include <GUIConstantsEx.au3>

HotKeySet("{F6}", "Praca")
HotKeySet("{F7}", "Pauza")
GUICreate("klikanie 1", 200, 200)
GUICtrlCreateLabel("F6 start" & @CR &"F7 stop" & @cr & "co sekunde klika 1", 10, 10, 180, 50)

GUISetState(@SW_SHOW)

Pauza()

func Pauza()
While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
endfunc


func Praca()
while 1
	for $idx = 0 to 5
		send("{1 down}")
		sleep(1000)
		send("{1 up}")
		sleep(1000)
	next			
	Interval()
wend
endfunc


func Interval()
send("2")
endfunc

 

3 albo takie odlicznie

jesli $idx = 3 to wykonuj funkcje interval

 

#include <GUIConstantsEx.au3>

HotKeySet("{F6}", "Praca")
HotKeySet("{F7}", "Pauza")
GUICreate("klikanie 1", 200, 200)
GUICtrlCreateLabel("F6 start" & @CR &"F7 stop" & @cr & "co sekunde klika 1", 10, 10, 180, 50)

GUISetState(@SW_SHOW)

Pauza()

func Pauza()
While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
endfunc


func Praca()
while 1
	for $idx = 0 to 5
		send("{1 down}")
		sleep(1000)
		send("{1 up}")
		sleep(1000)

		if $idx = 3 then
			Interval()
		endif
	next			
wend
endfunc


func Interval()
send("2")
endfunc

 

i pewnie jeszcze na milion innych sposobów

 

 

co do ostatniego pytania nie rozumie

Opublikowano

chodzi mi o WInWaitActive, zeby wyskakiwał msgbox gdy dane okno nie jest otwarte, i zeby skrypt dzialał tylko i wyłącznie w tym oknie

 

If not WinExists ("NAZWA_OKNA") Then MsgBox (0,"Błąd", "Okno nie jest otwarte")
WinWaitActive ("NAZWA OKNA")
If WinActivate("NAZWA_OKNA") Then
;instrukcje
EndIf

 

O takie coś chodzi ?

Opublikowano

żeby wysłało do okna zminimalizowanego zamiast funkcji

send()

używasz

ControlSend()

jesli nie działa to zamiast kompilatora 3.3.x.x używasz 3.2.4.9

jesli nie działa nadal to szukasz którejś z alternatywnych includek

np: MinimizedMsg.au3 (na oryginalnym forum autoit) lub czegoś w tym stylu ale raczej nie ma sensu bo się powtarzają

jesli dalej nie działa to masz problem

 

 

/:edit

 

sorki zle przeczytałem

chodziło o ogólne blokowanie wysyłania do okna a nie do zminimalizowanego :D

wprawdzie tamto jest lepsze no ale...

w najnowszej wersji autoit doszła ciekawa funkcja:

SendKeepActive ( "title" [, "text"] )

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...