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

[Problem] Z Przerwaniem Pętli


Rekomendowane odpowiedzi

Opublikowano

Co musi być w np. button2, aby przerwać tą pętle?

Case $Button1

TrayTip("Bot", "xxx bot włączony! Miłego bocenia ;)", 0)

WinWaitActive("xxx")

sleep(1000)

For $i = 0 To 999999

send("x")

sleep(50)

send("c")

sleep(50)

Next

Bo mam

Case $Button2

Exit

i coś nie działa :P (wyłącza się dopiero, gdy przestanie powtarzać)

Dumny członek MPCforum od 09 czerwca 2009 ;)

Opublikowano
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("xxx", 390, 317, 275, 182)
GUICtrlSetState(-1, $GUI_HIDE)
$Button1 = GUICtrlCreateButton("Włącz", 48, 224, 107, 41, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Wyłącz", 176, 224, 99, 41, $WS_GROUP)
$Button3 = GUICtrlCreateButton("Twórca", 48, 280, 227, 17, $WS_GROUP)
$Button4 = GUICtrlCreateButton("Instrukcja", 288, 224, 75, 73, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
	Case $GUI_EVENT_CLOSE
		Exit
	Case $Button1
		TrayTip("Bot", "xxx", 0)
		sleep(1000)
		WinWaitActive("xxx")
For $i = 0 To 35
		send("c")
		sleep(50)
		send("x")
		sleep(50)
	Next
Case $Button2
		Exit
	Case $Button3
		MsgBox(0, "Twórca", "xxx")
	Case $Button4
		TrayTip("Bot", "Włączam instrukcję obsługi", 0)
		MsgBox(0, "Instrukcja", "xxxx!")
EndSwitch
WEnd

Dumny członek MPCforum od 09 czerwca 2009 ;)

Opublikowano

to zrób hotkey'em

np.

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
HotKeySet("{END}","ext")
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("xxx", 390, 317, 275, 182)
GUICtrlSetState(-1, $GUI_HIDE)
$Button1 = GUICtrlCreateButton("Włącz", 48, 224, 107, 41, $WS_GROUP)
GUICtrlCreateLabel("END--Wyłącz", 176, 224, 99, 41, $WS_GROUP)
$Button3 = GUICtrlCreateButton("Twórca", 48, 280, 227, 17, $WS_GROUP)
$Button4 = GUICtrlCreateButton("Instrukcja", 288, 224, 75, 73, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Func ext()
 Exit
 EndFunc
While 1
       $nMsg = GUIGetMsg()
       Switch $nMsg
               Case $GUI_EVENT_CLOSE
                       Exit
               Case $Button1
                       TrayTip("Bot", "xxx", 0)
                       sleep(1000)
                       WinWaitActive("xxx")
       For $i = 0 To 35
                       send("c")
                       sleep(50)
                       send("x")
                       sleep(50)
               Next
               Case $Button3
                       MsgBox(0, "Twórca", "xxx")
               Case $Button4
                       TrayTip("Bot", "Włączam instrukcję obsługi", 0)
                       MsgBox(0, "Instrukcja", "xxxx!")
       EndSwitch
WEnd

Opublikowano

Dzięki, działa ;)

A jak zrobić żeby tylko przestał "pętlić"? :D

Dumny członek MPCforum od 09 czerwca 2009 ;)

Opublikowano

Żeby jakimś wydarzeniem (np naciśnięciem buttona) przerwać działanie jakiejś funkcji (np pętli) musisz skorzystać z opcji

Opt("GUIOnEventMode", 1)

Oraz tych dwóch funkcji:

GUISetOnEvent
GUICtrlSetOnEvent

Ta sygnatura jest pusta.

Opublikowano

Hmm...

 

Sprawdziłem to i okazuje się, że z opcją Opt("GUIOnEventMode", 1), jedna funkcja deklarowana przez użytkownika odpali się dopiero po skończeniu drugiej...

 

Ktoś zna sposób na przerwanie zadeklarowanej przez siebie funkcji/pętli spoza tej funkcji/pętli?

 

Spoza czyli innym sposobem niż "ExitLoop"

Ta sygnatura jest pusta.

Opublikowano

No i zrobiłem bocika ;)

http://www.speedyshare.com/files/23548535/Auto_PickUp_Bot_v1.0.exe

http://www.virustotal.com/pl/analisis/e65a5f860c3f4182639f033b4a3c91f6d90d22818a82c022a570114b8672d89b-1280252321

 

Dzięki za pomoc :D

Dumny członek MPCforum od 09 czerwca 2009 ;)

Opublikowano

Ponawiam moje pytanie w tym topicu:

 

W jaki sposób, "z zewnątrz", przerwać inną funkcję?

 

While True
$msg = GetGuiMsg()
Switch $msg
Case $button1
For $i = 1 to 1000
Sleep(1000)
Next
Case $button2
; co tutaj ma być, żeby wykonywanie pętli z buttona 1 zostało przerwane? 
EndSwitch
WEnd

Ta sygnatura jest pusta.

Uczeń
Opublikowano

Ponawiam moje pytanie w tym topicu:

 

W jaki sposób, "z zewnątrz", przerwać inną funkcję?

 

While True
$msg = GetGuiMsg()
Switch $msg
Case $button1
For $i = 1 to 1000
Sleep(1000)
Next
Case $button2
; co tutaj ma być, żeby wykonywanie pętli z buttona 1 zostało przerwane? 
EndSwitch
WEnd

 

A może coś z

 $i 

 

Czyli np.:

 


Global $i
While True
     $msg = GetGuiMsg()
            Switch $msg
            Case $button1
                  For $i = 1 to 1000
                          Sleep(1000)
                  Next
            Case $button2
                        $i = 1000

WEnd

 

Niekoniecznie musi być dobrze, ale może to podsunie ci jakiś pomysł?

Jeśli pomogłem, daj mi proszę + dobrze :)?

reklamaambasadora.jpg

Opublikowano

Nie, bo nie chodzi tylko o pętle -.-

 

Dałem akurat taki przykład, ale ogólnie chodzi mi o przerywanie wszelkich funkcji wywoływanych wcześniej przez użytkownika.

Ta sygnatura jest pusta.

Opublikowano

autoit na ślepo wykonuje to co ma zadane a ze nie jest wielowątkowy jedno polecenie w pętli wykonuje się az do wyłączenia programu bez możliwości zatrzymiania , zwłaszcza jak cokolwiek umieścisz w głownej pętli to już masakra , nie zatrzymasz bez restartu tymbardziej jak zapętli się wykonywanie programu

 

nim zrobisz program zrób sobie rozpiske/schemat blokowy działania programu normalnie na kartce ( to takie nie profesionalne i staromodne ktoś powie , ale bardzo pomocne ) po rodzielaj sobie funkcje na moduły i praktycznie do każdego co ma działać w pętli dodaj mozliwosć sprawdzania stanu funkcji jak i jej zmiany , w ten sposób jedną tylko zmienną możesz powodować zatrzymanie funkcji , a do zarządzania wszystkim zrób jedną funcje

 

zresztą, tyle możliwości co i poleceń warunkowych jest w programie że wkońcu trzeba się nauczyć uzywać innych a nie tylko tych co poznałeś , Switch nie jest jedyną funkcją przydatna Select też się przydaje przy budowie

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Uczeń
Opublikowano

Nie, bo nie chodzi tylko o pętle -.-

 

Dałem akurat taki przykład, ale ogólnie chodzi mi o przerywanie wszelkich funkcji wywoływanych wcześniej przez użytkownika.

Aha, sprawdzalem, ale nic nie dało. Mam natomiast temat z innego forum Click

Jeśli pomogłem, daj mi proszę + dobrze :)?

reklamaambasadora.jpg

Opublikowano

kiedyś jakoś przerywałem pętle

musze pomyślec i zrobie edita

@edit

ahh namęczyłem się :D

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
global $zmienna
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 179, 47, 192, 124)
$Button1 = GUICtrlCreateButton("Button1", 8, 8, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Button2", 88, 8, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
HotKeySet("{END}","nom")
func nom()
Exit
EndFunc
#EndRegion ### END Koda GUI section ###
func ha()
ta()
EndFunc

dupa()
func dupa()
while 1
       $nMsg = GUIGetMsg()
       Switch $nMsg
               Case $GUI_EVENT_CLOSE
                       Exit
				Case $Button1
					$zmienna = 1
					ha()
               case $Button2
                       exit
       EndSwitch
WEnd
EndFunc
func ta()
       TrayTip("Bot", "xxx bot włączony! Miłego bocenia ", 0)
	while 1
send("x")
sleep(50)
send("c")
sleep(50)
lol()
WEnd
                       EndFunc


func lol()
$nMsg = GUIGetMsg()
       Switch $nMsg
               Case $GUI_EVENT_CLOSE
                       Exit
				Case $Button1
					$zmienna = 1
					dupa()
               case $Button2
                       exit
			EndSwitch
			ha()
EndFunc

liczył bym na plusa

Opublikowano

dla czego plusik? dział tylko dla takiego zestawienia funkcji jak masz w przykładzie. dodaj inne to już problem bo nie działa :P

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

żadna z funkcji które wywołujesz nie dział w pętli , a o ile się nie myle o ten problem właśnie chodziło

przedstawiłeś wykonanie tylko funkcji i powrót do stanu początkowego przez wyłączenie całkowite, chodzi o zatrzymanie działania jednej i uruchomienie całkiem innej

 

by właściwie działało wszystko musi byś na zasadzie przełącznika , włączony/wyłączony .

 

z własnych doświadczeń z AutoIt wiem że przydaje się znajomość elektroniki i podstawy działania bramek logicznych ( NOT, OR i AND z wieloma wejściami a jak dodam do tego EX-NOR , NOR albo NAND ) i tak staram się tworzyć skrypty , tu schematy logiczne wspaniale sie sprawdzają i dają zastosować w praktyce przy budowie programu pisanego w języku skryptowym gdzie wynik można dostać w postaci logicznej jest albo nie ma ( 0 albo 1 )

wszystko co napisałem obsługuje AutiIt bez problemu , pozostaje tylko dopasować do wymagań programu funkcje by działały tak jak powinny

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
global $zmienna
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 179, 47, 192, 124)
$Button1 = GUICtrlCreateButton("Button1", 8, 8, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Button2", 88, 8, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
HotKeySet("{END}","nom")
func nom()
Exit
EndFunc
#EndRegion ### END Koda GUI section ###
func ha()
if $zmienna = 0 then toaleta()
ta()
EndFunc

dupa()
func dupa()
while 1
       $nMsg = GUIGetMsg()
       Switch $nMsg
               Case $GUI_EVENT_CLOSE
                       Exit
				Case $Button1
					$zmienna = 1
					ha()
               case $Button2
                       exit
       EndSwitch
WEnd
EndFunc
func ta()
       TrayTip("Bot", "xxx bot włączony! Miłego bocenia ", 0)
	while 1
send("x")
sleep(50)
send("c")
sleep(50)
lol()
WEnd
                       EndFunc


func lol()
$nMsg = GUIGetMsg()
       Switch $nMsg
               Case $GUI_EVENT_CLOSE
                       Exit
				Case $Button1
					$zmienna = 1
					dupa()
               case $Button2
                       toaleta()
			EndSwitch
			ha()
		EndFunc

		func toaleta()
			msgbox(0,"info","zmieniłem funkcje")
			$zmienna = 0
			toaleta()
			EndFunc

nie do końca cię rozumiem.

funkcje tworzą jedną pętle

tutaj zrobiłem skrypt na twoją prośbe "chodzi o zatrzymanie działania jednej i uruchomienie całkiem innej "

pare poprawek i by smigało(dałem tylko przykład)

ja już nie myśle..

ide spac jutro pogłówkuje

Opublikowano

może zmieniłeś ale... wyłączajac jedną funkcje włączyłeś drugą która się zapętliła i działa bez końca , nie ma możliwości ponownego wznowienia pierwszej funkcji jak tylko restart programu :(

nie mam autoita na tym kompie by sprawdzić ale to tak z pierwszego wrażenia wygląda że tak działa

 

jak ktoś chce może się pobawić w logike :)

Symulator bramek logicznych

http://joshblog.net/projects/logic-gate-simulator/Logicly.html

 

właśnie takie symulowanie zachowania się skryptu pozwala uniknąć sprzężeń zwrotnych funkcji czyli mówiąc potocznie zapętlanie się ich i niemożność wyłączenia

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

to sie da zamknąć na kilka sposobów... ale nie chce wam psuć przyjemności snucia teorii.

wielowątkowość też istnieje ale to trochę bardziej 'skomplikowańsze' niż problem jak zamknąć pętle.

Opublikowano

no tak adliby i rejestrowanie funkcji jako procesu systemu itp... nawet dla pomysłowego autora _Timer_Diff też się przydaje w tym celu

 

zresztą po co wprowadzać udogodnienia i usprawnienia, większość "nowych" skryptów autorzy i tak piszą na zasadzie skopiowania starego, wprowadzenia retuszu w postaci zmian wartości i ... podpisaniu jak własny autorski , żenada.

 

jedno dobre żę jeszcze nie istnieje możliwość zdekompilowania exeka i wyciągnięcia source ;)

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

Jak zarejestrować funkcję jako proces systemu?

 

Adlibregister - jest mi znajome.

 

Dziób tukana, powiedz coś więcej, proszę!

Ta sygnatura jest pusta.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...