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

Przerobienie krótkiego skryptu z autoita na C++


Rekomendowane odpowiedzi

Opublikowano

Cześć.
Chciałbym się spytać, czy jest to możliwe jeśli chodzi ogólnie o możliwość na forum i możliwość wykonania czegoś takiego, jak przerobienie kodu który podam niżej, na coś co byłoby napisane w C++ i działało tak samo.
 

$state=False

HotKeySet("`", "function")
HotKeySet("!k", "kill")


Do
if $state = True Then
Send("{a down}")
Sleep(10)
Send("{1}")
Sleep(10)
Send("{a up}")
Sleep(5)

MouseClick("left")
Sleep(5)

Send("{d down}")
Sleep(10)
Send("{2}")
Sleep(10)
Send("{d up}")
Sleep(5)

MouseClick("left")
Sleep(5)

Send("{a down}")
Sleep(10)
Send("{3}")
Sleep(10)
Send("{a up}")
Sleep(5)

MouseClick("left")
Sleep(5)

Send("{d down}")
Sleep(10)
Send("{4}")
Sleep(10)
Send("{d up}")
Sleep(5)

MouseClick("left")
Sleep(5)

Send("{a down}")
Sleep(10)
Send("{5}")
Sleep(10)
Send("{a up}")
Sleep(5)

MouseClick("left")
Sleep(5)

Send("{d down}")
Sleep(10)
Send("{1}")
Sleep(10)
Send("{d up}")
Sleep(5)

MouseClick("left")
Sleep(5)

Endif
Until False

Func function()
$state = NOT $state
EndFunc

Func kill()
Exit
EndFunc

To jest ten kod.
Niby nie jest to skomplikowany skrypt, jednak potrzebowałbym tego mieć napisane w języku c++.
Wynagrodzę lajkami.
Btw, program działa na zasadzie.
1. Uruchamiamy program
2. Tylda startuje/stopuje pętlę
3. Pętla jak widać działa na zasadzie przytrzymywania i puszczania na zmiane "a" i "d", klikania lewego przycisku myszy w miejsce w którym aktualnie znajduje sie kursor, oraz klikanie klawiszy w sekwencji: 132541

Błagam o pomoc.

Opublikowano

Bo gra do której mi to potrzebne wykrywa autoita i skrypty skompilowane przez niego i crashuje.
Testowałem inny napisany przez C++ i nie ma błędów z samej gry, ale sam program ma problem.

już podaję kod
 

#include <Windows.h>

int main();
DWORD WINAPI bot(LPVOID lpParameter);
void changework(void);
bool work = false;

/*
    PRZYKŁAD:

	INPUT kbd;
	kbd.type = INPUT_KEYBOARD;
	kbd.ki.wVk = 0x30;
	kbd.ki.wScan = 0;
	kbd.ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
	SendInput(1, &kbd, sizeof(INPUT));
*/

/*
	Algorytm:
	1
	sleep 5
	lclick
	2
	sleep 5
	lclick
	...
	5
	sleep 5
	lclick
*/
                         
int main()
{
	ShowWindow(GetConsoleWindow(), SW_HIDE);

	CreateThread(NULL, NULL, bot, NULL, NULL, NULL);

	while (true)
	{
		if(GetAsyncKeyState(0x39))
		{ changework(); } else if (GetAsyncKeyState(0x75))
		{ return 0; }

	}
	return 0;
}

void changework(void)
{
	work = !work;
	
}

DWORD WINAPI bot(LPVOID lpParameter)
{
	INPUT kbdin;
	INPUT msin;

	kbdin.type = INPUT_KEYBOARD;
	kbdin.ki.wScan = 0;
	kbdin.ki.dwFlags = KEYEVENTF_EXTENDEDKEY;

	msin.type = INPUT_MOUSE;
	msin.mi.dx = 0;
	msin.mi.dy = 0;

	while (true)
	{
		if (work)
		{
			for (int i = 0x31; i <= 0x35; i += 0x1)
			{
				kbdin.ki.wVk = i;
				SendInput(1, &kbdin, sizeof(INPUT));
				Sleep(50);
				msin.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
				SendInput(1, &msin, sizeof(INPUT));
				msin.mi.dwFlags = MOUSEEVENTF_LEFTUP;
				SendInput(1, &msin, sizeof(INPUT));
				//Sleep(500);
			}
		} else {
			//MessageBox(NULL, "loop2", "ok2", MB_OK);
			Sleep(100);
		}
	}
	return 0;
}

To ten kod.
Program napisany w C++ ma taki problem, że aktywując pętlę(przyciskiem 9 bodajże) powinienem zastopować go naciskając jeszcze raz ten sam przycisk. Ale niestety zdarza się dosyć często że musze klikać z 5 razy zanim zastopuje. w autoicie tego nie miałem.
Dodatkowo skrypt musiałby być przerobiony,by zmienić rodzaj naciskanych klawiszy (z virtual na takie drugie, słyszałem że jakoś się szuka tego MSDN->input->keyboardinput i coś tam się ustawia i robi). na dodatek skrypt z c++ nie wiem jak dodać coś na zasadzie:

Send("{a down}")
Sleep(10)
Send("{a up}")

Czyli imitacja naciśnięcia i zwolnenia klawisza.

Opublikowano

Zamiast GetAsyncState, z którego nie powinieneś korzystać nigdy, użyj RegisterHotKey

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309(v=vs.85).aspx

 

słyszałem że jakoś się szuka ti coś tam się ustawia i robi

Jesteś bardzo dobrze poinformowany. Wystarczy tylko przeanalizować kod, który masz i zagłębić się w dokumentację. 

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx

Ta sygnatura jest pusta.

Opublikowano

Zasadniczo na c++ nie znam się praktycznie wcale, wszystko co nabyłem to dzięki phoenixowi. Również to o czym jestem dobrze poinformowany :P
Sam skrypt pisał on.
Dlatego jakbym mógł Cię prosić, pomóż mi.
1. Byłbyś w stanie wyedytować kod tak aby używał tego drugiego rodzaju klawiszy?

2. A RegisterHotKey wpłynie na to że nie będzie mi się bugować stopowanie pętli?

3. Mógłbyś mi przybliżyć sprawę jeśli chodzi o PressDown i PressUp lub coś na zasadzie "hold"? Tak jak tam napisałem w autoicie.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...