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 nie włączającym się skryptem


Rekomendowane odpowiedzi

Opublikowano

Jak widać prosty skrypt. Pierwszy raz mam styczność z autoit, zrobiłem coś takiego, ale skrypt się nie odpala, czemu?

HotkeySet ("{F1}", "wciskaj") ;wlaczanie programu klawiszem F1
HotkeySet ("{ESC}", "wylacz") ;wylaczanie programu klawiszem ESC
HotkeySet ("{F2}", "pauza") ;pauzwa klawiszem F2
Func wciskaj()
   $zmienna1=0
   $zmienna2=0
   ;start (1 | 1)
While $zmienna1 < 39 ; rozmiar - 1
 
 
 For $iloscpowtorzenia = 1 To 39
Send ("s")
Sleep (300)
Send ("r")
Sleep(300)
Next
 
 
Send ("d")
Sleep(300)
Send ("r")
Sleep(300)
 
 For $iloscpowtorzenia2 = 1 To 39
Send("w")
Sleep(300)
Send ("r")
Sleep(300)
Next
 
 
Send ("d")
Sleep(300)
Send ("r")
Sleep(300)
 
 
   $zmienna1+=1
Wend
 
While $zmienna2 < 39 ; rozmiar - 1
 
 For $iloscpowtorzenia = 1 To 39
Send ("w")
Sleep (300)
Send ("r")
Sleep(300)
Next
 
 
Send ("a")
Sleep(300)
Send ("r")
Sleep(300)
 
 For $iloscpowtorzenia2 = 1 To 39
Send("s")
Sleep(300)
Send ("r")
Sleep(300)
Next
 
 
Send ("a")
Sleep(300)
Send ("r")
Sleep(300)
 
 
   $zmienna2+=1
Wend
 
EndFunc
 
Func pauza()
   While 1
 sleep(1000)
   WEnd
EndFunc
 
Func wylacz()
   Exit
EndFunc
Opublikowano

Jedyne co robi skrypt, to ustawia hotkeye i się kończy. Po ustawieniu hotkeyów dodaj While 1 która np. powtarza w kółko Sleep(1000).

Opublikowano

Można jedną pętle mieć 

While 1 

; pierwsza 
For $i = 39 To 1 Step -1
   ... ble ble ble 
Next

   ... ble ble ble 


; druga  
For $i = 39 To 1 Step -1
   ... ble ble ble 
Next

 
... ble ble ble

Wend 

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

W takim razie jak mam zapętlić cały kod?

Główna pętla nie zapętla kodu poniżej, który według warunku powinien się wykonać 2 razy. 

While $rundki < 2 ; ilosc rund ;ZAPĘTLANIE CAŁOŚCI

    While $zmienna1 < 2 
        For $iloscpowtorzenia = 1 To 3 
            Send ("s")
            Sleep(100)
            Send ("r")
            Sleep(100)
        Next
 
            Send ("d")
             Sleep(100)
            Send ("r")
             Sleep(100)
            Send("{ENTER}")
 
       For $iloscpowtorzenia2 = 1 To 3
           Send("w")
           Sleep(100)
            Send ("r")
           Sleep(100)
       Next
 
           Send ("d")
            Sleep(100)
           Send ("r")
            Sleep(100)
           Send("{ENTER}")
 
    $zmienna1+=1
    Wend
    
    For $iloscpowtorzenia = 1 To 3 
        Send ("a")
         Sleep ("100")
        Send("{ENTER}")
    Next
;PĘTLA GŁÓWNA
$rundki+=1
Wend
Opublikowano

Nie widać że napisałem pętle działającą cały czas ?  Od tego jest

 

Tak przy okazji , nic nie zrobiłeś by ci działała pętala ileś tam razy , a przykład bardzo dobrze pokazuje jak to napisać : 

$zmienna=0 

While $i<10 

... ble ble ble 

$zmienna+=1 

Wend

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

Nie widać że napisałem pętle działającą cały czas ?  Od tego jest

Widzę że się nie rozumiemy. Chcę zapętlić ten fragment kodu:

While $zmienna1 < 2
For $iloscpowtorzenia = 1 To 3
Send ("s")
Sleep(100)
Send ("r")
Sleep(100)
Next
 
Send ("d")
Sleep(100)
Send ("r")
Sleep(100)
Send("{ENTER}")
 
For $iloscpowtorzenia2 = 1 To 3
Send("w")
Sleep(100)
Send ("r")
Sleep(100)
Next
 
Send ("d")
Sleep(100)
Send ("r")
Sleep(100)
Send("{ENTER}")
 
$zmienna1+=1
    Wend
 
For $iloscpowtorzenia = 1 To 3
Send ("a")
  Sleep ("100")
  Send("{ENTER}")
  Next

Dopisując na początek while 1 i na koniec Wend program się nie zapętla. Zapętlony zostaje ostatni fragment czyli

For $iloscpowtorzenia = 1 To 3
Send ("a")
  Sleep ("100")
  Send("{ENTER}")
  Next

#edit

Rozwizałem problem. Trzeba było jedynie wyzerować zmienną. 

Opublikowano

Dziwnie piszesz, jeżeli zmienna1 jest = 0 to pętla się nie uruchamia. 

 

Przy okazji skrypt na pauzowanie skryptu 

; zmienna 
Global $zatrzymaj=0
;funkcja
Func pauza()
    $zatrzymaj = NOT $zatrzymaj
    While $zatrzymaj
        sleep(100)
    WEnd
EndFunc

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

Normalnie tak, ale jeśli zerujesz zmienna1 na końcu wewnętrznej pętli (a raczej już poza)  to dzięki temu zewnętrzna pętla będzie mogła tą wewnętrzną pętle wykonać jeszcze raz.

Dzięki za skrypt na pauze, właśnie myślałem nad tym czy AutoIT umożliwia pauzowanie skryptu na danym etapie działania :)

Opublikowano

Właśnie że nie umożliwia, załączona zostaje po prostu inna pętla w funkcji pauzy i ona działa do czasu wyłączenia ( zmiany stanu na 0 ) . W autoit może działać tylko jedna pętla dlatego nie robi się pętli w pętli albo pętle z warunkami tak ustawionymi że w danym momencie działa tylko jedna. 

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

@Ktosiu

Nie mozna robic pętli w pętli? Czemu niby? Nieskonczona pętla wewnatrz innej petli nie ma sensul co prawda, ale nawet taki kod powinien zadzialac.

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

Zadziałać tak, ale na raz w danym czasie może działać i być wykonywana tylko jedna z pętli w skrypcie. Powiedzmy takie stopniowanie pętli, jedna uruchamia drugą, druga trzecią , trzecia może czwartą albo piątą. 

Zgodnie z tą zasadą by nie zawiesić programu czy nie mieć błędów w wynikach powinno się wyłączać/zakończyć  pętle w odwrotnej kolejności co się je załączało inaczej skrypt resetuje się, wywali błąd albo poda nieprawidłowy wynik. Czyż nie tak wynika z logicznego myślenia i działania skryptów ? 

 

Nie powiem, nawet z dużym błędem potrafią skrypty czy gotowe programy działać będąc źle napisane. 

 

 

 

Na podobnych zasadach robi się w nim przecież boty skoro nie można użyć w nim wielowątkowości ( AdlibRegister to tylko namiastka dodatkowych wątków w programie ) 

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

Zgodnie z tą zasadą by nie zawiesić programu czy nie mieć błędów w wynikach powinno się wyłączać/zakończyć  pętle w odwrotnej kolejności co się je załączało [...]

 

A da się je zakończyć w innej kolejności niż od najbardziej zagnieżdżonej w górę??

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

No da, wyłączając pętlę ale nie dostaje się wyniku czy akcji wszystkiego zawartego w pętli. 

 

Akurat nie piszę dużo w autoit botów tylko programy do automatyki i sterowania, czasem sterowniki wentylatorów, świateł czy temperatury do komputerów, jak widzisz w tym przypadku potrzebny jest dokładny wynik wykonania wszystkiego po kolei.

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

Jakieś dziwne rzeczy piszesz. Daj przykład jak jesteś w stanie.

 

PS

Automatyka nie jest jakimś wyjątkiem - każdy program powinien działać zgodnie z założeniami, więc nie wiem co Twoje dygresje na ten temat mają wnosić do tematu.

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

Chodził mi w jaki sposób on napisał w poście wcześniej jak chce by mu działał skrypt, potem zmienił post i nie ma tego.

 

 Według tego co napisał skrypt by działał ale w programie wielowątkowym a nie w Autoit który wykonuje polecenia po kolei i tylko jedno na raz. Przecież nie można uruchomić sobie pętli by działała a w między czasie odpalić innej by robiła co innego niezależnie od pierwszej. Składniowo w Autoit może być prawidłowo napisany skrypt ale nie działać, Scite czasem nie wyłapuje takich błędów.

Czyli by działał jak należy musi wykonać jedną pętlę, zakończyć ja i wykonać potem drugą , albo wykonać jedna pętlę z zawartą niej drugą, która jak się skończy wróci do pierwszej by ją dokończyć.  

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

Ciężko, żeby edytor wyłapywał błędy w zamyśle programisty - raczej sprawdza tylko składnię. Moje pytanie odnośnie kolejności wychodzenia z pętli było retoryczne - kolejnością tą nie można dowolnie manipulować i to co pisałeś jest błędne. Rozumiem natomiast, że autor tematu zepsuł coś na etapie koncepcji, ale to odrębny temat.

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" 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...