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

Dwie funkcje jednocześnie.


Nugat`

Rekomendowane odpowiedzi

Opublikowano

Cześć, mam pytanie w jaki sposób zrobić, że:

KLIK
Sleep na 15 minut
---w tym czasie klika w pętli---
KLIK
Sleep 3 sek
KLIK
Sleep 3 sek

ten klik z 3 sekundami trwa ciagle, podczas gdy "odlicza się" sleep z pierwszego kliknięcia (15 minut).

Da się tak zrobić? Prosiłbym o przykład.

Pozdrawiam.

Opublikowano

@Nugat`

Robisz pętle i np funkcje isTimeUp()

 

co każdy tick pętli patrzysz jaki czas minął od ostatniego wykonania pętli i dodajesz do jakiejś zmiennej, jeśli isTimeUp() == true to wtedy wykonujesz daną czynność. Z tego co wiem to autoit jest jednowątkowy, więc za dużo nie zdziałasz wątkami, chyba ze jest jakiś UDF ktory robi coś podobnego.

Bot do gry NosTale:


[bOT] NosBota 1.3v

Opublikowano

Geez, policz sobie (15 * 60s) / 3s i będziesz wiedział ile razy musisz powtórzyć pętlę.

Ogólem potrzebujesz dwóch pętli - zewnętrzna nieskończona (czy jak tam chcesz), wewnętrzna powtarzana tyle razy ile wychodzi z obliczeń.

 

Możesz też zamiast tego ustawić dwa timery z różnym interwałem, ale to przerost formy nad treścią.

 

@MistrzMaster

Przekombinowałeś trochę - z armatą na muchę ;)

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

@Nugat`

Pseudokod (nie pamiętam składni AutoIta):

while true
  click()
  for $i = 1 to 300
    click()
    sleep(3000)
  next
wend

Oczywiście przydałoby się jakieś wyjście z głównej pętli, ale to już sprawdź sam.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Nie żeby coś, ale popsułeś sobie skrypt. Było dobrze, eh - teraz oba kliki masz co 3s.

Masz teraz pętlę która co 3 sekundy robi NIC 3000 razy...

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Bo tam widziałem odwrotnie clicki przypisywałeś:

while true
  click() ; <- tu przypisujesz klik który ma być co 15m
  for $i = 1 to 300 ; <- tu oznacza liczbę krótkich kliknięć zanim cykl zacznie się od nowa
    click() ; <- tu przypisujesz klik który ma być co 3s
    sleep(3000) ; <- to oznacza przerwę 3000ms (3s)
  next
wend

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

 

Bo tam widziałem odwrotnie clicki przypisywałeś:

for $i = 1 to 300 ; <- tu oznacza liczbę krótkich kliknięć zanim cykl zacznie się od nowa

tego nie rozumiem, jakich kliknięć? Ja chcę napisać skrypt, który kliknie mi w jedno miejsce, po kliknięciu jakoś w tle będzie sobie odliczał 15 minut, a w międzyczasie będę mógł zrobić inne kliknięcia - teraz raz mi kliknie i koniec, nie działa.

 

EDIT: Te inne kliknięcia oczywiście w pętli, ale żeby nie wykonywało pierwszego kliknięcia póki nie minie 15 minut od poprzedniego.

Opublikowano

@Nugat`

Robisz pętle i np funkcje isTimeUp()

 

co każdy tick pętli patrzysz jaki czas minął od ostatniego wykonania pętli i dodajesz do jakiejś zmiennej, jeśli isTimeUp() == true to wtedy wykonujesz daną czynność. Z tego co wiem to autoit jest jednowątkowy, więc za dużo nie zdziałasz wątkami, chyba ze jest jakiś UDF ktory robi coś podobnego.

Tak jak mówiłem, nie wiem czemu to jest niby przekombinowane, przynajmniej nie stoisz w dwóch pętlach.

Taki pseudokod, wiem że jest mało czytelny ale chyba oddaje to jaki jest pomysł

while true ; glowna petla programu
If isUp($15mintimerclick) Then
<costam>
resetTimer($15mintimerclick)
EndIf
If isUp($3mintimerclick) Then
<costam>
resetTimer($3mintimerclick)
EndIf
updateTimer($15mintimerclick)
updateTimer($3mintimerclick)
Sleep(1)
WEnd

Bot do gry NosTale:


[bOT] NosBota 1.3v

Opublikowano

tego nie rozumiem, jakich kliknięć? Ja chcę napisać skrypt, który kliknie mi w jedno miejsce, po kliknięciu jakoś w tle będzie sobie odliczał 15 minut, a w międzyczasie będę mógł zrobić inne kliknięcia - teraz raz mi kliknie i koniec, nie działa.

 

EDIT: Te inne kliknięcia oczywiście w pętli, ale żeby nie wykonywało pierwszego kliknięcia póki nie minie 15 minut od poprzedniego.

 

Wysil się, pomyśl trochę, poczytaj -> https://pl.wikibooks.org/wiki/AutoIt

 

Już i tak dostałeś dwa gotowe rozwiązania, niektórzy nie mają tyle szczęścia tutaj ;)

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Tylko nic nie pomogło, nie przeczytałeś tego o co prosiłem. Miało kliknąć raz, poczekać 15 min, podczas tego czekania żeby mi wykonywało 2 kliknięcia w pętli, czyli że klika raz, dwa, czeka 1 min i od nowa> klika raz, klika dwa, czeka.

So grained.

Opublikowano

Chcesz gotowca to pisz w dziale zlecenia, nie tutaj -> http://www.mpcforum.pl/topic/1031873-zlecenia-temat-zbiorczy/

Jak się jest leniwym, to trzeba zapłacić.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

Nie prosiłem o gotowca, naucz sie czytac bo cos ci to nie wychodzi. Skrypt napisze sam ale te wasze przyklady po prostu nie dzialaja, nie wypowiadaj sie juz tu jak nic nie wnosisz.

Opublikowano

To prawda co powiedział , któryś z przedmówców o wielowątkowości, ale można zastosować wbudowaną funkcję w autoita która do Twojego zadania z powodzeniem wystarczy. Jest to przykład , więc musisz pozamieniać sobie milisekundy na takie aby odpowiadały Twoim czasom czyli 15 minut i 1 min.

AdlibRegister("_click15min", 1000 * 20)
AdlibRegister("_click1min", 5000)

While 1
	Sleep(10)
WEnd



Func _click15min()
	MouseClick("left", 10, 10, 1)
EndFunc   ;==>_click15min



Func _click1min()
	MouseClick("left", 100, 10, 1)
	MouseClick("left", 100, 20, 1)
EndFunc   ;==>_click1min


  • 2 tygodnie później...
Opublikowano

pokaż swój kod , funkcja adlibregister wywołuje w określonych odstępach czasu zdefiniowaną funkcję , i jeżeli zdefiniujesz kilka takich adlibregister każda pójdzie swoim torem więc nie ma możliwości aby było inaczej. 

Opublikowano
#include <WinAPI.au3>
#include <WindowsConstants.au3>

WinSetTitle ( "Costam", "", "Okienko")

HotKeySet("{F6}", "start")
HotKeySet("{F7}", "zamknij")

AdlibRegister("_click15min", 1000 * 20)
AdlibRegister("_click1min", 5000)

While 1
	Sleep(10)
WEnd



Func _click15min()
	ControlClick("Okienko", "","","Left",1,732,246)
	Sleep(2000)
	ControlClick("Okienko", "","","Left",1,411,700)
	Sleep(10000)
	ControlClick("Okienko", "","","Left",1,998,208) ;zamknij
	Sleep(5000)
EndFunc   ;==>_click15min



Func _click1min()
    ControlClick("Okienko", "","","Left",1,445,245)
	ControlClick("Okienko", "","","Left",1,389,475)
	Sleep(2000)
	ControlClick("Okienko", "","","Left",1,689,573)
	Sleep(3000)
	ControlClick("Okienko", "","","Left",1,998,208) ;zamknij
	Sleep(3000)
	ControlClick("Okienko", "","","Left",1,389,475) 
	ControlClick("Okienko", "","","Left",1,389,475) 
	Sleep(2000)
	ControlClick("Okienko", "","","Left",1,689,573)
	Sleep(3000)
	ControlClick("Okienko", "","","Left",1,998,208) ;zamknij
	Sleep(3000)
 EndFunc   ;==>_click1min

 Func zamknij()
	TrayTip("Klikacz", "Koniec.", 1, 3)

W tym kodzie pierw wywołuje funkcję tę niżej, poźniej tę "15 min". Następnie znowu tę niżej i tę wyżej, pętla obejmuje je obydwie.

Opublikowano

nie widzę pętli obejmującej jakiekolwiek funkcje i tak ma pozostać , masz ustawione złe czasy w adlibregister , jeżeli jest to cały kod po co biblioteka WinAPI ? co do klikania cały czas to przyjrzyj się dokładnie funkcji controlclick być może jest ich za dużo, i w momencie uruchomienia funkcji przez adlibregister leci seria controlclick , a wtedy masz wrażenie że do funkcje ciągle są wywoływane, poza tym weź pod uwagę sleepy chodzi o to że zanim dana funkcja się zakończy spowolniona sleepami adlibregister naliczy już tyle sekund ile trwają sleepy w funkcji, należy wyrejestrować adlibregister.

Powinno to wyglądać mniej więcej ta: uruchamiasz działanie klawiszem  F6

#include <WindowsConstants.au3>

WinSetTitle("Costam", "", "Okienko")

HotKeySet("{F6}", "start")
HotKeySet("{F7}", "zamknij")



While 1
	Sleep(10)
WEnd


Func start()

	AdlibRegister("_click15min", 1000 * 60 * 15) ; klika co 15 min
	AdlibRegister("_click1min", 1000 * 60); klika co 1 min
EndFunc   ;==>start



Func _click15min()
	AdlibUnRegister("_click15min")
	ControlClick("Okienko", "", "", "Left", 1, 732, 246)
	Sleep(2000)
	ControlClick("Okienko", "", "", "Left", 1, 411, 700)
	Sleep(10000)
	ControlClick("Okienko", "", "", "Left", 1, 998, 208) ;zamknij
	Sleep(5000)
	AdlibRegister("_click15min", 1000 * 60 * 15)
EndFunc   ;==>_click15min



Func _click1min()
	AdlibUnRegister("_click1min")
	ControlClick("Okienko", "", "", "Left", 1, 445, 245)
	ControlClick("Okienko", "", "", "Left", 1, 389, 475)
	Sleep(2000)
	ControlClick("Okienko", "", "", "Left", 1, 689, 573)
	Sleep(3000)
	ControlClick("Okienko", "", "", "Left", 1, 998, 208) ;zamknij
	Sleep(3000)
	ControlClick("Okienko", "", "", "Left", 1, 389, 475)
	ControlClick("Okienko", "", "", "Left", 1, 389, 475)
	Sleep(2000)
	ControlClick("Okienko", "", "", "Left", 1, 689, 573)
	Sleep(3000)
	ControlClick("Okienko", "", "", "Left", 1, 998, 208) ;zamknij
	Sleep(3000)
	MsgBox('', '', '')
	AdlibRegister("_click1min", 1000 * 60)
EndFunc   ;==>_click1min

Func zamknij()
	TrayTip("Klikacz", "Koniec.", 1, 3)
EndFunc   ;==>zamknij
Opublikowano

Działa, dzięki. Jest tylko jeden problem, to przed pierwszymi kliknięciami czeka odpowiednio minutę, i przed tym "15 min click" czeka 15 minut. Dałoby się, żeby nie czekało po uruchomieniu klawiszem F6, 15 minut? Resztę bym sobie ogarnął ;)

 

Pozdrawiam

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...