ankieteradrian Opublikowano 8 Marca 2017 Udostępnij Opublikowano 8 Marca 2017 Witam.Próbuje, próbuje i coś mi nie wychodzi Napisałem jakiś tam program(bot), i są w nim różne funkcje, które się włącza klikając checkboxa (checked albo unchecked). I obok robię inputa i wpisując w niego nazwe hotkeya (np. {F2}) chcę, by kiedykolwiek kliknę tego hotkeya F2 checkbox automatycznie się sam zaznaczał/odznaczał.Mógłbym prosić o jakieś wskazówki, najlepiej gotową funkcję?edit2 sprawa - za pomocą HotKeySet ustawiłem, by po kliknięciu klawisza wykonała się dana funkcja (weźmy za przykład podmianę strzałek na wsad)HotKeySet("w", "up")HotKeySet("a", "left")HotKeySet("s", "down")HotKeySet("d", "right")Func up()send("{up}")EndFuncFunc down()send("{down}")EndFuncFunc left()send("{left}")EndFuncFunc right()send("{right}")EndFuncProblem jest taki, że niby to działa, ale czasem po kliknięciu klawisza (wsad) postać nie wykonuje ruchu - dość często.3 sprawa:func nazwa($1,$2,$3,$4)controlsend("xxx","","","{ctrldown}{down}{ctrlup}")controlsend("xxx","","","{ctrldown}{up}{ctrlup}")controlsend("xxx","","","{ctrldown}{left}{ctrlup}")controlsend("xxx","","","{ctrldown}{right}{ctrlup}")EndFuncCzasem jakby ctrl nie zadziałał i postać zamiast wykonać obrót to się porusza (strzałka = ruch postaci, ctrl+strzałka = obrót postaci w tej grze). Dlaczego tak się dzieje? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ktosiu Opublikowano 8 Marca 2017 Udostępnij Opublikowano 8 Marca 2017 1 nie chce mi się szukać, kiedyś było coś takiego na forum. 2 używaj _IsPressed, jest prościej 2 i 3 Wcale nie musi działać bo to związane jest z API gry i zabezpieczeniami. Zwykle pisze się osobną obsługę do większości gier albo steruje przez obsługę pamięci. Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ankieteradrian Opublikowano 8 Marca 2017 Autor Udostępnij Opublikowano 8 Marca 2017 Niby działa, ale z błędami i nie wiem dlaczego się tak dzieje. Przecież musi się jakoś dać te funkcje napisać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ktosiu Opublikowano 8 Marca 2017 Udostępnij Opublikowano 8 Marca 2017 No to ci wyraźnie napisałem , trzeba znać metodę i sposób wysyłania danych by działało z określoną grą. W starych grach bez problemu działało controlsend do okna gry czy zmodyfikowane udf typu sendkey, presskey itp. 100% działającą metodą jest prawie zawsze obsługa pamięci np nomadmemory czy używanie hooków klawiatury . Na forum Autoit jest dożo dostępnych rozwiązań gotowych, poszukaj i sprawdzaj sobie w grze czy działa obsługa klawiatury. Ewentualnie masz duże forum z grami elitepvpers to szukaj gotowego rozwiązania jeśli jest do tej gry. Pierwszym problemem co zwykle musisz ominąć to zabezpieczenia gry ( bypass ) drugim w kolejności zabezpieczenia klawiatury. Gdy to już masz albo nie ma tego w grze dalsza obsługa gry jest tylko kwestią dobrania sposobu obsługi. Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pawellek Opublikowano 8 Marca 2017 Udostępnij Opublikowano 8 Marca 2017 1. https://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetState.htm 2. Moze zamien send na controlsend. 3. OTS czy RL Tibia? Jaki client? OTC? Ja nigdy nie mialem z tym problemow. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ankieteradrian Opublikowano 8 Marca 2017 Autor Udostępnij Opublikowano 8 Marca 2017 Właśnie wróciłem do domu, zaraz sprawdzę 1 i 2, a co do 3 - OTS, OTC (a sprawdzę czy na zwykłym działa normalnie) @Edit Sprawdziłem punkt 2 - na normalnym kliencie działa bez problemu, problem jest na OTC Co do controlsenda - hmm, ale muszę w nim podać nazwę programu(w tym przypadku klienta) prawda?, a chciałbym by było to raczej uniwersalne pod tego czy innego clienta @Edit2 No właśnie korzystałem z tej funkcji, ale nie bardzo wiem jak to napisać by było ok(dopiero uczę się autoit) HotKeySet("3", $GUI_CHECKED) Func checked($1,$2) GUICtrlSetState($hCheck1) = 1 ;GUICtrlSetState($Checkbox1, $GUI_CHECKED) EndFunc Próbowałem tak i jeszcze inaczej, ale ciągle coś nie tak(od razu mówię, że wypisałem niezależne od siebie próby, to nie jest całość). A to sama funkcja zaznaczania miała być, a jeszcze trzeba wymyślić, żeby po następnym odznaczeniu odznaczało. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pawellek Opublikowano 8 Marca 2017 Udostępnij Opublikowano 8 Marca 2017 Zwykly Send nie dziala na zminimalizowanym oknie, wiec i tak musisz wykorzystac controlsend i tak. Przykład z checkboxem: #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> HotKeySet("{HOME}", ToggleCheckbox) Example() Func Example() ; Create a GUI with various controls. Local $hGUI = GUICreate("Example", 300, 200) ; Create a checkbox control. Global $idCheckbox = GUICtrlCreateCheckbox("Standard Checkbox", 10, 10, 185, 25) Local $idClose = GUICtrlCreateButton("Close", 210, 170, 85, 25) ; Display the GUI. GUISetState(@SW_SHOW, $hGUI) ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $idClose ExitLoop EndSwitch WEnd ; Delete the previous GUI and all controls. GUIDelete($hGUI) EndFunc ;==>Example Func _IsChecked($idControlID) Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED EndFunc ;==>_IsChecked Func ToggleCheckbox() If _IsChecked($idCheckbox) Then GUICtrlSetState($idCheckbox, $GUI_UNCHECKED) Else GUICtrlSetState($idCheckbox, $GUI_CHECKED) EndIf EndFunc ;==>ToggleCheckbox Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ankieteradrian Opublikowano 8 Marca 2017 Autor Udostępnij Opublikowano 8 Marca 2017 Dziękuję bardzo Pawellek - problem numer 1 już rozwiązany, teraz zajmę się problemem numer 2. Tak jak mówiłem, na zwykłym kliencie działa okey, na OTC są problemy. Spróbuję z tym controlsend, ale tak jak mówiłem wolałbym żeby to było bardziej uniwersalne (jak klient nie jest aktywny to nie potrzebuję by to działało, bo po co?). Także nie można by użyć czegoś innego bez przypisywania konkretnego programu/clienta? PS gdybym chciał korzystać z isPressed to tak to ma wyglądać? Bo coś mi nie działało(nie zagłębiałem się za bardzo, tak na szybko napisałem i nie śmigało) If _IsPressed("57") Then ;w send("{up}") elseIf _isPressed("53") Then ;s send("{down}") elseIf _isPressed("41") Then ;a send("{left}") elseIf _isPressed("57") Then ;d send("{right}") EndIf Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ktosiu Opublikowano 8 Marca 2017 Udostępnij Opublikowano 8 Marca 2017 To elseIf zamień na if nie używasz przecież warunków Cały czas masz jedną wadę takie rozwiązania mozna tylko jeden klawisz nacisnąć czyli ruch po skosie wykluczony Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ankieteradrian Opublikowano 8 Marca 2017 Autor Udostępnij Opublikowano 8 Marca 2017 Problem 2 - controlsend działa świetnie, tylko tak jak pisałem, wolałbym żeby to działało tylko jak okno gry jest aktywne. Jakieś rozwiązanie? Ktosiu - no tak, dziękuję. A co do ruchu po skosie - faktycznie, fajnie żeby np. w+d = skos w prawa-góra. Spróbuję to rozwiązać sam, jak się nie uda to się zgłoszę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marchwj Opublikowano 8 Marca 2017 Udostępnij Opublikowano 8 Marca 2017 @Edit Sprawdziłem punkt 2 - na normalnym kliencie działa bez problemu, problem jest na OTC Na niektórych ots (np. Medivia) tak jest, też nie znalazłem rozwiązania na to :/ @Edit Co do controlsenda - hmm, ale muszę w nim podać nazwę programu(w tym przypadku klienta) prawda? Możesz też użyć classu aplikacji, bierzesz go z tej apki $hWnd = "[CLASS:clssapk]" a chciałbym by było to raczej uniwersalne pod tego czy innego clienta Jeżeli chcesz żeby działało na MC to użyj PID'u, tutaj masz kod bota, który jest na tej zasadzie napisany. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ankieteradrian Opublikowano 8 Marca 2017 Autor Udostępnij Opublikowano 8 Marca 2017 Co do classu aplikacji - tak, ale chodzi mi by nie było to podpięte pod aplikację tylko działało wyłącznie jak aplikacja jest używana - czyli aktywna/na wierzchu(zapobiega to temu, że przeglądam Internet piszę coś w google, a postać mi się rusza, bo nacisnąłem "w"). O to tylko chodzi i jeszcze o to, bym przy ewentualnej nazwie clienta nie musiał komuś podsyłać "poprawionej wersji", bo muszę zmienić w skrypcie nazwę aplikacji(tu - klienta). @Edit Chyba, że dodać jakąś funkcję w tej Func ToggleCheckbox() np. "jeśli program jest aktywny/na wierzchu to użyj funkcji stop_hotkeye()"? Ale mógłby ktoś jakiegoś gotowca podesłać? A wracając do tamtego kodu, dobrze jest teraz? Bo nadal nie działa: func podmiana_start() ;2 opcja If _IsPressed("57") Then ;w send("{up}") EndIf If _isPressed("53") Then ;s send("{down}") EndIf If _isPressed("41") Then ;a send("{left}") EndIf If _isPressed("57") Then ;d send("{right}") EndIf EndFunc ;;;;;;;;;;;;;;;; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
wasta Opublikowano 9 Marca 2017 Udostępnij Opublikowano 9 Marca 2017 A coś takiego. Sprawdzone i działa, ale zobacz czy o to ci chodziło. HotKeySet("{ESC}", "end") HotKeySet("w", "up") HotKeySet("s", "down") HotKeySet("a", "left") HotKeySet("d", "right") While True Sleep(50) WEnd Func up() send("{UP}") EndFunc Func down() send("{DOWN}") EndFunc Func left() send("{LEFT}") EndFunc Func right() send("{RIGHT}") EndFunc Func end() Exit EndFunc Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ankieteradrian Opublikowano 9 Marca 2017 Autor Udostępnij Opublikowano 9 Marca 2017 Ooo - o dziwo zmiana up na UP i analogicznie pozostałych rozwiązało problem. Bardzo dziękuję wasta. Problem 1 i 2 rozwiązane. Jeszcze został problem 3. Podmieniłem na: controlsend("nazwa","","","{CTRLDOWN}{DOWN}{CTRLUP}") controlsend("nazwa","","","{CTRLDOWN}{UP}{CTRLUP}") controlsend("nazwa","","","{CTRLDOWN}{LEFT}{CTRLUP}") controlsend("nazwa","","","{CTRLDOWN}{RIGHT}{CTRLUP}") Lecz niestety nie zdało to rezultatu. Co jakiś czas(testowo ustawiam, by postać ruszała się co 1sec) postać zamiast się obracać zmienia pozycję o 1 kratkę do przodu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
wasta Opublikowano 9 Marca 2017 Udostępnij Opublikowano 9 Marca 2017 Spróbuj tak. Nie testowałem, ale może będzie lepiej. controlsend("nazwa","","","^{DOWN}") controlsend("nazwa","","","^{UP}") controlsend("nazwa","","","^{LEFT}") controlsend("nazwa","","","^{RIGHT}") Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ankieteradrian Opublikowano 9 Marca 2017 Autor Udostępnij Opublikowano 9 Marca 2017 Teraz w ogóle cały czas chodzi. Cel jest taki, żeby był wciśnięty klawisz ctrl i jednocześnie klikane strzałki. Po tej zmianie jakby klawisz ctrl nie był wciśnięty. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pawellek Opublikowano 9 Marca 2017 Udostępnij Opublikowano 9 Marca 2017 controlsend("nazwa","","","{CTRLDOWN}") Sleep(50) controlsend("nazwa","","","{DOWN}") controlsend("nazwa","","","{UP}") controlsend("nazwa","","","{LEFT}") controlsend("nazwa","","","{RIGHT}") controlsend("nazwa","","","{CTRLUP}") Ewentualnie PostMessage/SendMessage. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ankieteradrian Opublikowano 9 Marca 2017 Autor Udostępnij Opublikowano 9 Marca 2017 Taki sam efekt, postać chodzi zamiast stać w miejscu i się obracać. @Edit Wygląda na to, że poradziłem sobie wrzucając wszystko do jednej linijki w controlsendzie Także problem rozwiązany. Dziękuję bardzo wszystkim pomagającym. Co najważniejsze już zrobione, teraz mam jeszcze kilka dodatkowych pytań. 1. Jak zrobić by po wciśnięciu w+d postać szła w prawy górny ukos, w+a postać szła w lewy górny ukos, s+d postać szła w prawy dolny ukos, s+a postać szła w lewy dolny ukos. Nie mogę sobie z tym poradzić, w ogóle postać idzie na ukos, gdy numlock jest wyłączony, czyli po wciśnięciu na numelocku 7,9,1,3 mogę sterować ukosami. Próbowałem wpisać {NUMEPAD9} w sendzie, ale to pisze mi "9", zamiast iść na skos. Nie działa. W dodatku nie wiem jakiej funkcji użyć by było "w+d", czyli 2 literki - nie chciałbym w controlsendzie, tylko coś na zasadzie send(czyli bez podpinania się pod konkretnego klienta). 2. Macie jakiś pomysł/gotowca na zabezpieczenie, by ze skryptu mogły korzystać tylko osoby przeze mnie wybrane? Tzn. może jakaś funkcja wyłączająca bota po miesiącu? (Tylko, żeby nie dało się obejść usuwając rejestr). Po prostu nie chcę bym dał koledze, a on rozdał go na prawo i lewo. Albo jakieś inne zabezpieczenie? Kod aktywujący na miesiąc, może jakiś identyfikator numeru SID? No macie jakiś ciekawy pomysł? (To tak przyszłościowo, bo planuję rozbudować funkcję bota) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pawellek Opublikowano 10 Marca 2017 Udostępnij Opublikowano 10 Marca 2017 1. #include <SendMessage.au3> #include <WindowsConstants.au3> #include <APISysConstants.au3> #include <WinAPI.au3> #include <WinAPISys.au3> #include <WinAPIvkeysConstants.au3> While 1 Sleep(100) If BitAND(_WinAPI_GetAsyncKeyState($VK_W), 0x8000) <> 0 And BitAND(_WinAPI_GetAsyncKeyState($VK_D), 0x8000) <> 0 Then _Send($VK_PRIOR) ;prawy gorny ukos If BitAND(_WinAPI_GetAsyncKeyState($VK_W), 0x8000) <> 0 And BitAND(_WinAPI_GetAsyncKeyState($VK_A), 0x8000) <> 0 Then _Send($VK_HOME) ; lewy górny ukos If BitAND(_WinAPI_GetAsyncKeyState($VK_S), 0x8000) <> 0 And BitAND(_WinAPI_GetAsyncKeyState($VK_D), 0x8000) <> 0 Then _Send($VK_NEXT) ; prawy dolny ukos If BitAND(_WinAPI_GetAsyncKeyState($VK_S), 0x8000) <> 0 And BitAND(_WinAPI_GetAsyncKeyState($VK_A), 0x8000) <> 0 Then _Send($VK_END) ; lewy dolny ukos WEnd Func _Send($key) Local $HWND = WinGetHandle("[ACTIVE]") _SendMessage($HWND, $WM_KEYDOWN, $key, _MakeLong(1, _WinAPI_MapVirtualKey($key, $MAPVK_VK_TO_VSC))) Sleep(50) _SendMessage($HWND, $WM_KEYUP, $key, _MakeLong(1, _WinAPI_MapVirtualKey($key, $MAPVK_VK_TO_VSC)) + 0xC0000000) EndFunc Func _MakeLong($LoDWORD, $HiDWORD) Return BitOR($HiDWORD * 0x10000, BitAND($LoDWORD, 0xFFFF)) EndFunc 2. https://www.pelock.com/pl/produkty/autoit-obfuscator + https://www.autoitscript.com/forum/topic/31020-xprotecau3-automated-protect-and-get-paid/ jesli jeszcze dziala. Jak nie to google -> hwid i sam sobie musisz zabezieczyc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ankieteradrian Opublikowano 10 Marca 2017 Autor Udostępnij Opublikowano 10 Marca 2017 1. Tylko w tej chwili jak wciskam np. w+d to faktycznie idzie tak jak ma iść, z tym, że w czacie(gry) pojawiają mi się te literki. Mógłbyś jakoś to zmodyfikować, by się nie pojawiały? Bo sam sobie nie mogę poradzić. @Edit Aha, bo pewnie za chwilę będę miał problem następny. To powinno działać tylko jeśli checkbox jest zaznaczony, więc trzeba dopisać w środku jeszcze <> 0 And BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED Tak? Czy samo: <> 0 And BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pawellek Opublikowano 10 Marca 2017 Udostępnij Opublikowano 10 Marca 2017 1. Nie umiem. 2. <> 0 And BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ankieteradrian Opublikowano 10 Marca 2017 Autor Udostępnij Opublikowano 10 Marca 2017 Rozwiązałem problem, więc usuwam co tu pisałem. @Edit Super, wszystko działa. Może jeszcze się ktoś orientuje, na temat dobrego, darmowego obfuscatora? Podlinkuje ktoś? I jeszcze może pytanko o takie zjawisko jak dash - czyli, że postacie w grze chodzą szybciej niż powinny. Można to jakoś ogarnąć? Można by ustawić mniejsze opóźnienie klawiszy, a są jakieś inne sposoby? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pawellek Opublikowano 10 Marca 2017 Udostępnij Opublikowano 10 Marca 2017 ~2 lata temu chyba wszystkie darmowe obfuscatory sprawdzilem i ogolnie to byly nic nie warte. Wiekszosc z nich zmienia po prostu nazwe zmiennych i funkcji... juz wbudowany w SciTE stripper jest lepszy. Z kolei te lepsze jak np. M3CO powoduja rozjezdzanie sie GUI lub "psuja" niektore funkcje programu bez errorow podczas kompilacji. http://www.elitepvpers.com/forum/autoit/2728725-how-solutions-prevent-stealing-your-autoit-code.html Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Zarchiwizowany
Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.