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

Prośba o poprawienie bota


amrs1

Rekomendowane odpowiedzi

Opublikowano

Mam prośbę, mianowicie potrzebuje skrypt który uruchamia się i zamyka pod jakimiś klawiszami,  po odczekaniu 5 sekund naciska LPM następnie po znalezieniu obrazka (lub pikseli) naciska PPM następnie po odnalezieniu innego obrazka naciska i przytrzymuje klawisz q przez ok 10s oraz po upływie tych 10s dodatkowo naciska klawisz f1 bądź jakiś inny jeżeli f1 nie może być . I żeby tak chodził w koło.

Za pomoc z góry dziękuje, morduje się z tym już trzeci dzień i nie mogę sobie poradzić. kolasadaniel@tlen.pl

napisałem coś takiego, ale nie działa mi to  :

 

MsgBox(0, "hej", :) ")
HotKeySet("1","start")
HotKeySet("2","exits")
Global $x = False
While 1
Sleep(1000)
MouseClick("left")
Sleep(3000)
PixelSearch(778, 958,1046, 909, 0xF8A8FF
If $search = 1 Then
MouseClick ("right")
Sleep(2000)
PixelSearch(771, 956, 966, 1037, 0x050B10
If $search = 1 Then
Send("{q down}")
Sleep(8000)
Send("{q up}")

Sleep(8000)
EndIf
WEnd

Opublikowano

Ten skrypt to niestety nie mógł ci zadziałać. W zasadzie co wiersz to błąd.

 

MsgBox(0, "hej", :) ") - brak " przed buźką

 

HotKeySet("1","start")
HotKeySet("2","exits")

 - rejestrujesz funkcje gorących klawiszy, a nie definiujesz tych funkcji (na marginesie HotKeySet("1","start") nie jest chyba potrzebne)

 

Global $x = False - deklarujesz zmienną, której nigdzie nie używasz.

 

PixelSearch(778, 958,1046, 909, 0xF8A8FF - brak zamknięcia nawiasu na końcu, druga współrzędna Y powinna być większa od pierwszej,
czyli prawdopodobnie powinno być: PixelSearch(778, 909, 1046, 958, 0xF8A8FF).

 

If $search = 1 Then - sprawdzasz wartość zmiennej  $search, której wcześniej ani nie zadeklarowałeś, ani nie nadałeś jej wartości. Zmienna ta więc de facto z punktu widzenia
skryptu nie istnieje. Nie może ona więc zawierać informacji, czy punkt o danym kolorze został znaleziony. Taką informację zawiera makro "@error". Powinno więc być:

If Not @error Then. Ponadto brak ENDIF kończącego instrukcję warunkową.

 

PixelSearch(771, 956, 966, 1037, 0x050B10 - brak zamknięcia nawiasu na końcu.

 

If $search = 1 Then - jak wyżej, ale tym razem masz ENDIF.

 

Ponadto rób wcięcia podkreślające zakres pętli, instrukcji warunkowych itp.

 

Oto poprawiony skrypt wykonujący czynności, które opisałeś:

MsgBox(0, "Hej", ":)")
HotKeySet("{ESC}","ExitScript") ;rejestrowanie funkcji kończącej skrypt po wciśnięciu ESC

While 1
   Sleep(1000)
   MouseClick("left")                              ;wciśnięcie lewego klawisza myszy
   Sleep(3000)
   PixelSearch(778, 909, 1046, 958, 0xF8A8FF) Then ;szukanie piksela w prostokątnym obszarze ekranu
   If Not @error Then                              ;jeżeli nie ma błedu to znaczy, że piksel został znaleziony
      MouseClick ("right")                         ;wciśnięcie prawego klawisza myszy
      Sleep(2000)
   EndIf

   PixelSearch(771, 956, 966, 1037, 0x050B10) Then
   If Not @error Then
      Send("{q down}")                             ;wciśnięcie i przytrzymanie klawisza q
      Sleep(10000)
      Send("{q up}")                               ;zwolnienie klawisza q
      Send("{F1}")                                 ;wciśnięcie klawisza F1
   EndIf
WEnd

;definicja funkcji kończącej skrypt po wciśnięciu klawisza ESC
Func ExitScript()
   Exit       ;zakończenie skryptu
EndFunc

Skrypt w tej wersji wykonuje tylko to co opisałeś, ale nie znaczy że będzie robił to o czym myślałeś.

Jeżeli chcesz nauczyć się czegoś o programowaniu w AutoIt to polecam mój podręcznik na WIKIBOOKS.

Masz tam wszystko opisane od A do Z i to jeszcze w języku polskim: https://pl.wikibooks.org/wiki/AutoIt

Opublikowano

Dziękuje bardzo za pomoc, lecz nie chce mi to działać poprawnie,program zaczyna działać, klika LPM, po chwili  wyskakuje mi błąd i zamyka program
"C:\Users\Daniel\Desktop\Nowy folder (4)\Nowy folder\moje.au3" (8) : ==> Illegal text at the end of statement (one statement per line).:
PixelSearch(773, 961, 1057, 1034, 0xF8A8FF) Then
PixelSearch(773, 961, 1057, 1034, 0xF8A8FF) ^ ERROR
>Exit code: 1    Time: 11.1

może dlatego że tego pixela tam nie ma ponieważ jeszcze nie wyskoczył ( w tej linijce:  PixelSearch(771, 956, 966, 1037, 0x050B10) Then     pokazują się różne obrazki, jeżeli nie trafi na wybrany, to program powinien zacząć od nowa). Z tego co wyczytałem to ten komunikat oznacza błąd w skrypcie ale nie jestem tego pewien. Skrypt nie powinien się chyba sam wyłączać jeżeli nie znajdzie od razu pixela lub obrazka?

 

 

Byłem na https://pl.wikibooks.org/wiki/AutoIt ale dla mnie to czarna magia :)

Opublikowano

Bardzo przepraszam, ale coś  się pokręciło przy kopiowaniu do postu (o dwa Then za dużo).

Oczywiście ten skrypt sam się nie zakończy (o ile nie ma w nim błędu), ponieważ działa w nieskończonej pętli While 1 ... Endwhile.

Jedynym sposobem jego zakończenia jest wciśnięcie klawisza ESC.

Oto poprawiony kod:

MsgBox(0, "Hej", ":)")
HotKeySet("{ESC}","ExitScript") ;rejestrowanie funkcji kończącej skrypt po wciśnięciu ESC
While 1
   Sleep(1000)
   MouseClick("left")                              ;wciśnięcie lewego klawisza myszy
   Sleep(3000)
   PixelSearch(778, 909, 1046, 958, 0xF8A8FF)      ;szukanie piksela w prostokątnym obszarze ekranu
   If Not @error Then                              ;jeżeli nie ma błędu to znaczy, że piksel został znaleziony
      MouseClick ("right")                         ;wciśnięcie prawego klawisza myszy
      Sleep(2000)
   EndIf

   PixelSearch(771, 956, 966, 1037, 0x050B10)
   If Not @error Then
      Send("{q down}")                             ;wciśnięcie i przytrzymanie klawisza q
      Sleep(10000)
      Send("{q up}")                               ;zwolnienie klawisza q
      Send("{F1}")                                 ;wciśnięcie klawisza F1
   EndIf
WEnd

;definicja funkcji kończącej skrypt po wciśnięciu klawisza ESC
Func ExitScript()
   Exit       ;zakończenie skryptu
EndFunc

P.S.

Myślę, że podręcznik to nie czarna magia, ale trzeba zacząć od początku i trochę poćwiczyć.

Jak zaczniesz samodzielnie pisać działające skrypty, to satysfakcja gwarantowana.

Sam też nie znałem AutoIt'a od urodzenia.

Pozdrawiam.

Opublikowano

prawie działa, nie chce Cię już męczyc ale jeszcze jedna prośba

Jak zrobić żeby zamiast pixela w drugim obrazku szukał całego

obrazka?

Opublikowano

Jest to proste. Ale w AutoIt nie ma funkcji do szukania obrazków. Musisz użyć zewnętrznego UDF'a o nazwie "ImageSearch.au3". Musisz znaleść w sieci (co nie jest trudne), ale UDF ten powinien zawierać biblioteką DLL o nazwie "ImageSearchDLL.dll" i wielkości 94 208 bajtów. Są też DLL o innej wielkości, ale te które wypróbowałem zawierały błędy i skrypt się wywala.

UDF ten jest bardzo prosty, gdyż zawiera tylko 4 funkcje. Najlepiej umieść go w folderze skryptu (oczywiście razem z wzmiankowaną biblioteką DLL).

Poniżej zamieszczam opis mojego autorstwa:

Cytat

 

ImageSearch.au3 (v.3.0)

 

 

_ImageSearch ($sFindImage, $iResultPosition, ByRef $iX, ByRef $iY, $iTolerance)

 

_ImageSearchArea ($sFindImage, $iResultPosition, $iLeft, $iUp, $iRight, $iBottom, ByRef $iX, ByRef $iY, $iTolerance)

 

_WaitForImageSearch ($sFindImage, $iWaitSecs, $iResultPosition, ByRef $iX, ByRef $iY, $iTolerance)

 

_WaitForImagesSearch($aFindImage, $iWaitSecs, $iResultPosition, ByRef $iX, ByRef $iY, $iTolerance)

 

Funkcje poszukują na ekranie obrazka wg pliku obrazka wzorcowego. Zwraca True gdy sukces, lub False gdy obrazka nie znaleziono.
Ponadto jeżeli obrazek został znaleziony, przez referencję w zmiennych $iX i $iY zostają wstawione jego współrzędne na ekranie.

 

Różnica między funkcjami _ImageSearch jest taka, że:

_ImageSearch – przeszukuje cały obszar ekranu

_ImageSearchArea – przeszukuje zadeklarowany prostokątny obszar ekranu.

Obie funkcje szukają obrazka jeden raz.

 

_WaitForImageSearch – poszukuje obrazka wielokrotnie w zadanym czasie (na całym ekranie)

_WaitForImagesSearch – poszukuje wielu obrazków wielokrotnie w zadanym czasie (na całym ekranie),

                                   nazwy wzorców szukanych obrazków należy umieścić w tablicy $aFindImage poczynając
                                   od indeksu 1, w komórce o indeksie 0 należy podać ilość obrazków do znalezienia.

 

Opis parametrów przekazywanych do funkcji:

$sFindImage – nazwa pliku z wzorcem poszukiwanego obrazka

$aFindImage – tablica z nazwami plików z wzorcami poszukiwanych obrazków

$iResultPosition – 0 oznacza, że będą zwrócone współrzędne lewego górnego narożnika znalezionego obrazka,

                         1 oznacza, że będą zwrócone współrzędne środka znalezionego obrazka

$iLeft, $iUp – współrzędne lewego górnego narożnika przeszukiwanego obszaru

$iRight, $iBottom – współrzędne prawego dolnego narożnika przeszukiwanego obszaru

$iX, $iY – w tych zmiennych znajdą się współrzędne znalezionego obrazka

$iTolerance – współczynnik tolerancji na różnicę kolorów wzorca i szukanego obrazka,
                    może przyjmować wartość od 0 do 255, 0 – brak tolerancji (kolory obrazka i wzorca muszą być identyczne),
                    255 – największa tolerancja

$iWaitSecs – czas w sekundach przez jaki ma być poszukiwany obrazek/obrazki.

 

UWAGA:

1. Wzorzec może być w formacie PNG, JPG, BMP, GIF.

2. Wzorzec i obrazek nie mogą być względem siebie skalowane, tzn. muszą mieć tyle samo pikseli w poziomie i pionie.

 

 

Przykład:

#include <ImageSearch.au3>

 

Dim $iX1, $iY1

$fResult = _ImageSearch("pic.bmp", 1, $iX1, $iY1, 0)

 

if $fResult Then

   MouseMove ($iX1, $iY1, 3)

   MsgBox(64, "HURA!", "Znaleziono obrazek.")

Else

   MsgBox(64, "Uuuu", "Nie znaleziono obrazka.")

EndIf

A teraz zmodyfikowany skrypt:

#include <ImageSearch.au3>  ;załadowanie zewnętrznego UDFa

Dim $iX1,$iY1

MsgBox(0, "Hej", ":)")
HotKeySet("{ESC}","ExitScript") ;rejestrowanie funkcji kończącej skrypt po wciśnięciu ESC
While 1
   Sleep(1000)
   MouseClick("left")                              ;wciśnięcie lewego klawisza myszy
   Sleep(3000)
   PixelSearch(778, 909, 1046, 958, 0xF8A8FF)      ;szukanie piksela w prostokątnym obszarze ekranu
   If Not @error Then                              ;jeżeli nie ma błędu to znaczy, że piksel został znaleziony
      MouseClick ("right")                         ;wciśnięcie prawego klawisza myszy
      Sleep(2000)
   EndIf

   If _ImageSearch("pic.bmp", 1, $iX1, $iY1, 0) Then ;jeżeli znajdzie obrazek Then...
      Send("{q down}")                               ;wciśnięcie i przytrzymanie klawisza q
      Sleep(10000)
      Send("{q up}")                                 ;zwolnienie klawisza q
      Send("{F1}")                                   ;wciśnięcie klawisza F1
   EndIf
WEnd

;definicja funkcji kończącej skrypt po wciśnięciu klawisza ESC
Func ExitScript()
   Exit       ;zakończenie skryptu
EndFunc

Sprawdziłem, skrypt działa.

 

P.S.

W ten sposób to się lubię męczy.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...