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
  • 0

Bind dwóch klawiszy pod jednym jednorazowo


DO123321

Pytanie

Opublikowano

Witam potrzebuje programu ktory bedzie klikal jednorazowo lctrl po tym jak klikne 1 lub 2

 

probowalem juz wielu kodow ale nie znam sie na autoit potrzebuje go tylko do tej jednej rzeczy niestety program zapetla mi czynnosc i spamuje ctrl i nie potrafie temu zapobiec 

 

HotKeySet("1", "klawisz1")

func klawisz1()
	
	While 1
	Send("{1}")
	Sleep(10)
	Send("{LCTRL}")
	WEnd
	
EndFunc

HotKeySet("2", "klawisz2")

func klawisz2()
	
	While 1
	Send("{2}")
	Sleep(10)
	Send("{LCTRL}")
	WEnd
	
EndFunc
		
While 1
WEnd																			

 

Ktos cos doradzi jak sie z tym uporac?

Fajnie tez mogloby byc gdyby program sam klikal ctrl ciagle co jakis czas ale nie az tak czesto zeby blokowal pozostale klawisze bo w tym wypadku to ile klika mi ctrl nie pozwala 1 i 2 dojsc do skutku

Napisałem coś sensownego lub Ci pomogłem?


Zostaw like

1 odpowiedź na to pytanie

Rekomendowane odpowiedzi

Opublikowano

Wpadasz w niekontrolowaną rekurencję.

Instrukcja Send("1") zawarta w funkcji klawisz1 powoduje wirtualne wciśnięcie klawisza 1, a więc i wywołanie funkcji klawisz1.

I tak na okrągło funkcja wywołuje samą siebie.

Ponadto nie możesz w funkcjach mieć nieskończonych pętli (while 1...wend), bo nie masz żadnego mechanizmu ich opuszczenia!

Więc nawet bez tej rekurencji zapętlasz się na amen, bo nie masz także możliwości zakończenia programu.

Proponuję więc coś takiego:

HotKeySet("1", "klawisz1")
HotKeySet("2", "klawisz2")
HotKeySet("{ESC}", "koniec")

While 1
	Sleep(10)
WEnd

;------------------------------------------
Func klawisz1()
	HotKeySet("1")
	Send("Jeden ")
	Sleep(10)
	Send("{LCTRL}")
	HotKeySet("1", "klawisz1")
EndFunc

Func klawisz2()
	HotKeySet("2")
	Send("Dwa ")
	Sleep(10)
	Send("{LCTRL}")
	HotKeySet("2", "klawisz2")
EndFunc

Func koniec()
	Exit
EndFunc

Specjalnie do send wstawiłem napisy Jeden i Dwa zamiast cyfr 1 i 2, żeby było ładnie widać jak to działa.

Docelowo możesz to zmienić.

Dlaczego to teraz działa dobrze?

Na wejściu do funkcji odwołuję definicję gorącego klawisza, dzięki temu pozbywamy się niechcianej rekurencji i send nie spowoduje ponownego wywołania funkcji w której się znajduje. A na końcu funkcji ponownie definiuję gorący klawisz.

Wywaliłem też niepotrzebna pętlę While...Wend, także zapętlającą funkcję, tak jak niechciana rekurencja.

No i dodałem możliwość zakończenia programu klawiszem ESC.

Daj znać, czy o takie coś ci chodziło.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...