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

Przypisanie funkcji pod buttona


Rekomendowane odpowiedzi

Opublikowano

Witam z racji że nigdzie nie było aplikacji typu anti-afk do mojej strzelanki multi, postanowiłem stworzyć własną. Czytałem tuty, całe wikibooks autoit itp. Kod działa, więc chciałem zrobić do niego GUI i tu jest problem bo nie mogę przypisać funkcji do buttona. Od paru dni się z tym męcze i wszystkie pomysły wyczerpane. Mam trzy funkcje START1, PAUSE1, QUIT1 i chcę je przypisać pod

$Button1, $Button2, $Button3. Próbowałem połączyć te dwa kody to wynik był taki że działał button start, a pauza i exit nie.

 

 

 

Tu podaję kod:

 

 

 

#RequireAdmin
 
If ProcessExists(".....") Then
   MsgBox(0, "Nazwa programu", "Program uruchomiony pomyślnie. ^_^ ")
Else
   MsgBox(0, "Nazwa programu", "Nie można uruchomić programu ponieważ gra ..... nie jest uruchomiona.")
Exit
EndIf
 
 
HotKeySet("{HOME}", "START1")
HotKeySet("{END}", "QUIT1")
HotKeySet("{INSERT}", "PAUSE1")
 
 
Global $gra = "nazwa okna gry"
 
$time = 1000       ; 1 sec
$time1 = 60000     ; 1 min
$time2 = 10*60000  ; 10 min
$time3 = 60*60000  ; 1h
 
 
 
Func START1()
While 1
For $i = 0 To 200
Controlsend($gra,"","", "{w down}")
Controlsend($gra,"","", "{left down}")
Controlclick($gra,"","","Left",1)
Next
Controlsend($gra,"","", "{w up}")
Controlsend($gra,"","", "{left up}")
For $i = 0 To 200
Controlsend($gra,"","", "{w down}")
Controlsend($gra,"","", "{right down}")
Controlclick($gra,"","","Left",1)
Next
Controlsend($gra,"","", "{w up}")
Controlsend($gra,"","", "{right up}")
WEnd
EndFunc
 
Func PAUSE1()
Controlsend($gra,"","", "{w up}")
Controlsend($gra,"","", "{left up}")
Controlsend($gra,"","", "{right up}")
While True
Sleep ($time)
WEnd
EndFunc
 
Func QUIT1()
Controlsend($gra,"","", "{w up}")
Controlsend($gra,"","", "{left up}")
Controlsend($gra,"","", "{right up}")
Exit
Endfunc
 
While 1
Sleep(100)
WEnd

 

 

 

GUI:

 

 

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
 
$Form1 = GUICreate("Bez nazwy", 421, 128, 304, 228)
$Button1 = GUICtrlCreateButton("START/RESUME", 8, 8, 129, 113)
GUICtrlSetBkColor(-1, 0xE3E3E3)
$Button2 = GUICtrlCreateButton("PAUSE", 152, 8, 89, 49)
GUICtrlSetBkColor(-1, 0xE3E3E3)
$Button3 = GUICtrlCreateButton("EXIT", 152, 72, 89, 49)
GUICtrlSetBkColor(-1, 0xE3E3E3)
$Label1 = GUICtrlCreateLabel("CONFIGURATION", 288, 8, 93, 17)
$Label2 = GUICtrlCreateLabel("Click button or use the keys:", 264, 24, 138, 17)
$Label3 = GUICtrlCreateLabel("[Home]      -  START/RESUME", 256, 48, 152, 17)
$Label4 = GUICtrlCreateLabel("[iNSERT]  -  PAUSE", 256, 72, 101, 17)
$Label5 = GUICtrlCreateLabel("[END]        -  EXIT", 256, 96, 90, 17)
GUISetState(@SW_SHOW)
 
 
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
 
EndSwitch
WEnd

 

 

 

Połączyłem to w taki sposób. Na czerwono zaznaczyłem kod w którym buttony sa przypisane pod funkcję.

 

 

 

#RequireAdmin
 
If ProcessExists(".....") Then
   MsgBox(0, "Nazwa programu", "Program uruchomiony pomyślnie. ^_^ ")
Else
   MsgBox(0, "Nazwa programu", "Nie można uruchomić programu ponieważ gra ..... nie jest uruchomiona.")
Exit
EndIf
 
 
HotKeySet("{HOME}", "START1")
HotKeySet("{END}", "QUIT1")
HotKeySet("{INSERT}", "PAUSE1")
 
 
Global $gra = "nazwa okna gry"
 
$time = 1000       ; 1 sec
$time1 = 60000     ; 1 min
$time2 = 10*60000  ; 10 min
$time3 = 60*60000  ; 1h
 
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
 
$Form1 = GUICreate("Bez nazwy", 421, 128, 304, 228)
$Button1 = GUICtrlCreateButton("START/RESUME", 8, 8, 129, 113)
GUICtrlSetBkColor(-1, 0xE3E3E3)
$Button2 = GUICtrlCreateButton("PAUSE", 152, 8, 89, 49)
GUICtrlSetBkColor(-1, 0xE3E3E3)
$Button3 = GUICtrlCreateButton("EXIT", 152, 72, 89, 49)
GUICtrlSetBkColor(-1, 0xE3E3E3)
$Label1 = GUICtrlCreateLabel("CONFIGURATION", 288, 8, 93, 17)
$Label2 = GUICtrlCreateLabel("Click button or use the keys:", 264, 24, 138, 17)
$Label3 = GUICtrlCreateLabel("[Home]      -  START/RESUME", 256, 48, 152, 17)
$Label4 = GUICtrlCreateLabel("[iNSERT]  -  PAUSE", 256, 72, 101, 17)
$Label5 = GUICtrlCreateLabel("[END]        -  EXIT", 256, 96, 90, 17)
GUISetState(@SW_SHOW)
 
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Button1
AdlibRegister("START1","1000")
Case $Button2
AdlibUnRegister("START1")
Case $Button3
Exit
EndSwitch
WEnd
 
Func START1()
While 1
For $i = 0 To 200
Controlsend($gra,"","", "{w down}")
Controlsend($gra,"","", "{left down}")
Controlclick($gra,"","","Left",1)
Next
Controlsend($gra,"","", "{w up}")
Controlsend($gra,"","", "{left up}")
For $i = 0 To 200
Controlsend($gra,"","", "{w down}")
Controlsend($gra,"","", "{right down}")
Controlclick($gra,"","","Left",1)
Next
Controlsend($gra,"","", "{w up}")
Controlsend($gra,"","", "{right up}")
WEnd
EndFunc
 
Func PAUSE1()
Controlsend($gra,"","", "{w up}")
Controlsend($gra,"","", "{left up}")
Controlsend($gra,"","", "{right up}")
While True
Sleep ($time)
WEnd
EndFunc
 
Func QUIT1()
Controlsend($gra,"","", "{w up}")
Controlsend($gra,"","", "{left up}")
Controlsend($gra,"","", "{right up}")
Exit
Endfunc
 
While 1
Sleep(100)
WEnd

 

 

 

Button1 włącza skrypt komendą:

Case $Button1
AdlibRegister("START1","1000")

 

Button2 powinien tą komendą dezaktywować funkcję startu, ale nic się nie dzieje żadnej reakcji.

Case $Button2
AdlibUnRegister("START1")

 

Button3 ma za zadanie wyłączyć skrypt i też nie działa. Jeśli przed kliknięciem przycisku startu zdecyduje jednak wyłączyć to normalnie się wyłączy to..

Case $Button3
Exit
 
Zamiast AdlibRegister używałem też coś takiego, miałem wtedy błędy z func...() więc dałem w pętle While 1 te buttony oraz funkcje i problem znikł, ale wtedy nie działały mi klawisze HOME,INSERT,END odpowiadające za sterowanie aplikacją.
 
Przykład:
Case $Button3
GUISetState(@SW_HIDE, $Form1)
Exit
 
Jak ktoś poradzi sobie z tym problemem to prosiłbym o krótkie wytłumacznie w czym tkwił błąd.
 
Opublikowano
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#RequireAdmin

If ProcessExists(".....") Then
	MsgBox(0, "Nazwa programu", "Program uruchomiony pomyślnie. ^_^ ")
Else
	MsgBox(0, "Nazwa programu", "Nie można uruchomić programu ponieważ gra ..... nie jest uruchomiona.")
	Exit
EndIf

$Form1 = GUICreate("Bez nazwy", 421, 128, 304, 228)
$Button1 = GUICtrlCreateButton("START/RESUME", 8, 8, 129, 113)
GUICtrlSetBkColor(-1, 0xE3E3E3)
$Button2 = GUICtrlCreateButton("PAUSE", 152, 8, 89, 49)
GUICtrlSetBkColor(-1, 0xE3E3E3)
$Button3 = GUICtrlCreateButton("EXIT", 152, 72, 89, 49)
GUICtrlSetBkColor(-1, 0xE3E3E3)
$Label1 = GUICtrlCreateLabel("CONFIGURATION", 288, 8, 93, 17)
$Label2 = GUICtrlCreateLabel("Click button or use the keys:", 264, 24, 138, 17)
$Label3 = GUICtrlCreateLabel("[Home]      -  START/RESUME", 256, 48, 152, 17)
$Label4 = GUICtrlCreateLabel("[INSERT]  -  PAUSE", 256, 72, 101, 17)
$Label5 = GUICtrlCreateLabel("[END]        -  EXIT", 256, 96, 90, 17)
GUISetState(@SW_SHOW)

HotKeySet("{HOME}", "START1")
HotKeySet("{END}", "QUIT1")
HotKeySet("{INSERT}", "PAUSE1")

Global $Paused = False
Global $gra = "nazwa okna gry"
Global $time = 1000 ; 1 sec
Global $time1 = 60000 ; 1 min
Global $time2 = 10 * 60000 ; 10 min
Global $time3 = 60 * 60000 ; 1h

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $Button1
			AdlibRegister("START1", "1000")
		Case $Button2
			AdlibUnRegister("START1")
		Case $Button3
			Exit
	EndSwitch
WEnd

Func START1()
	If Not $Paused Then
		For $i = 0 To 200
			ControlSend($gra, "", "", "{w down}")
			ControlSend($gra, "", "", "{left down}")
			ControlClick($gra, "", "", "Left", 1)
		Next
		ControlSend($gra, "", "", "{w up}")
		ControlSend($gra, "", "", "{left up}")
		For $i = 0 To 200
			ControlSend($gra, "", "", "{w down}")
			ControlSend($gra, "", "", "{right down}")
			ControlClick($gra, "", "", "Left", 1)
		Next
		ControlSend($gra, "", "", "{w up}")
		ControlSend($gra, "", "", "{right up}")
	EndIf
EndFunc   ;==>START1

Func PAUSE1()
	$Paused = Not $Paused
	ControlSend($gra, "", "", "{w up}")
	ControlSend($gra, "", "", "{left up}")
	ControlSend($gra, "", "", "{right up}")
EndFunc   ;==>PAUSE1

Func QUIT1()
	ControlSend($gra, "", "", "{w up}")
	ControlSend($gra, "", "", "{left up}")
	ControlSend($gra, "", "", "{right up}")
	Exit
EndFunc   ;==>QUIT1

AutoIt nie wspiera wielowatkowosci, wiec nie mozesz sobie uruchomic kilku nieskonczonych petl jednoczesnie.

 

 

Opublikowano

Ta sama sytuacja Start działa, ale już użyć pauzy ani zamknąć się nie da. Sa jakieś inne programy podobne do  języka w AutoIt obsługujące wielowątkowość ?

Opublikowano

Tak dobry.  W Global $gra = "nazwa okienka gry" podałem nazwe gry obojętnie jakiej np call of duty, counter-strike nawet notatnik dałem tam żeby zobaczyć czy działa to owszem klika te klawisze w tych grach i notatniku ale już zatrzymać ani wyłaczyć się tego nie da.. Po kliknięciu pauzy jest taki mały lag i dalej kontynuuje prace a jak będe trzymał przycisk pauzy to wtedy cały skrypt sie zatrzymuje do momentu aż puszcze ten przycisk i dalej swoje robi  :D Dodam że w HotKeySet jest ta sama sytuacja z taką różnicą że tutaj mogę normalnie wyłączyć program. Próbowałem też usunąć HotKeySet, nic to nie dało a program musiałem wyłączać przez zamknięcie procesu w menadżer zadań.

 

Edit. Skróciłem Func START1() bez tych komend "For"  i teraz działają buttony i hotkeyset. Tyle że uciąłem połowe funkcji. Postać idzie do przodu skręcając w lewo i strzela, a chciałbym żeby w lewo szła np 10sek lub x razy potem zmieniła kierunek na prawą stronę i tak dalej w kółko. Wcześniej robiłem to używając komendy For $i = 0 To 200 ale jak pisałem są te problemy z buttonami. Może jest jakaś komenda która daną czynność wykona 10sekund zamiast tego For $i = 0 To 200 który robi to 200 razy xD

 
Ta skrócona funkcja działa z buttonami i hotkeyset:
 
Func START1()
If Not $Paused Then
 
ControlSend($gra, "", "", "{w down}")
ControlSend($gra, "", "", "{left down}")
ControlClick($gra, "", "", "Left", 1)
 
EndIf
EndFunc   ;==>START1
Opublikowano

No tak, ja testowalem na sucho, bez zadnego programu i cala funkcja START1 wykonywala sie w 1ms. Gdy faktycznie naciska te klawisze to funkcja wykonuje sie 9 sekund co blokuje caly program na wlasnie taki okres czasu.

Zmniejsz liczbe akcji w START1 do absolutnego minimum, bo chyba taki spam klawiszy to troche za duzo jak na anty-afk. Jedno nacisniecie klawisz na sekunde nie wystarczy? :D

Jesli rzeczywiscie musisz to cale combo wysylac to chyba jednak trzeba bedzie przepisac bota na inny jezyk.

 

 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...