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

[C++] Symulacja Wciśnięć Klawiszy


Zenek97

Rekomendowane odpowiedzi

Opublikowano

Cześć

Napisałem program który wyłapuje dane z gry.

Teraz chcę dodać takie coś, że przy pewnych zdarzeniach program będzie odpowiednio reagował i z tym mam problem.

Np:

if(info.health_points<100)

{

keybd_event( VK_F1, 0x70, KEYEVENTF_EXTENDEDKEY | 0, 0 );

keybd_event( VK_F1, 0x70, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);

}

 

Wciskanie robię przez keybd_event (próbowałem z różnymi guzikami)

No i z tym problem jest taki że jak otworzę np: notatnik, to mi tam będzie wciskać tak jak trzeba, ale w grze to już nie działa ;/

Jakby do gry nie docierały te moje wciśnięcia...

Pomocy.

Opublikowano

Aby działały w grze, musisz poprzez HwNd działać na danym oknie.

A jeśli ma działać na zminimalizowanym, to zrób focus gry.

MultiClient Pod Tibię 8.62

22.09.2010

100% Made by Me

Opublikowano

Chodzi o aktywne okno.

 

HWND hwnd = NULL; // uchwyt do gl. okna

SendMessage(hwnd, WM_KEYDOWN, VK_F1, 0);

SendMessage(hwnd, WM_KEYUP, VK_F1, 0);

 

 

coś takiego mi nie działa...

Opublikowano

HWND hwnd;

//hwnd = GetForegroundWindow(); //1

hwnd = FindWindow("notatnik",NULL); //2

SendMessage(hwnd, WM_KEYUP, VK_F1, 0);

SendMessage(hwnd, WM_KEYDOWN, VK_F1, 0);

 

 

ani 1 ani 2 sposób nie daje rezultatów...

Opublikowano

Naucz się człowieku podstaw, jak nawet prostej, gotowej funkcji nie umiesz użyć... Boże...

Poczytaj Hello World a potem pisz boty...

MultiClient Pod Tibię 8.62

22.09.2010

100% Made by Me

Opublikowano

Gdybym wiedział tyle co ty, to na pewno bym tu o to nie pytał.

 

HWND hwnd;
hwnd = GetForegroundWindow();     //1 

SendMessage(hwnd,WM_CHAR, 0x00000073, 0x001F0001);
SendMessage(hwnd,WM_KEYUP, 0x00000053, 0xC01F0001); // S keyup

 

Jak w końcu zrobić, żeby te klawisze zaczęły działać?

Na obrazku, 1 - wiadomość oryginalna (przy wciśnięciu klawisza na klawiaturze) , 2 - wiadomość otrzymywana z mojego programu.

Co należy zmienić, żeby gra rozumiała te moje wiadomości?

592a8c69b6ab4_post-264676-0849647001287764571_thumb.png

Opublikowano

hwnd = GetForegroundWindow();

 

Jeśli używasz tego w konsolowej aplikacji np. od razu po włączeniu to ta funkcja zwróci ci uchwyt do twojego programu a nie gry.

 

Ja proponuję to zrobić przez FindWindow() a potem dla pewności SetForegroundWindow() i wtedy:

 

keybd_event(VK_F1,0,0,0); // to wystarczy nie trzeba dawać flag i keyup

 

;)

Opublikowano

t3ix: nie działa, tz. gra ignoruje te pseudo wciśnięcia...

 

na zielono: wiadomość tworzona przez keybd_event(VK_F1,0,0,0);

na czerwono: wiadomość tworzona przez fizyczne wciśnięcie F1

592a8c69c0dcc_post-264676-0567870001287769094_thumb.png

Opublikowano

Masz tu takie HelloWord mojego wykonania. Może da Ci do myślenia. Kod w C#

 

wrzucasz np pod buttona:

try
{
    Process Tibia = Process.GetProcessesByName("Tibia")[0];
    MessageBox.Show("Gra jest włączona!", " Ok!");
}
catch
{
    MessageBox.Show("Gra jest zamknięta!", " Error!");
}

MultiClient Pod Tibię 8.62

22.09.2010

100% Made by Me

Opublikowano

hehe udało mi się tak:

keybd_event(VK_F1, MapVirtualKey(VK_F1, 0), 0, 0);

 

i powstał problem,który jeszcze nie rozumiem:

Funkcja chodzi bardzo szybko, no tylko że warunek z keybd_event wykonuje się tylko raz! I tu jest zonk...

Żeby znów zadziałało, muszę przejść z gry na inne okno, powrócić, stworzyć sytuację wykonania keybd_event i znów wykona się tylko raz...

 

zrobiłem test

keybd_event(VK_F1, MapVirtualKey(VK_F1, 0), 0, 0);

keybd_event(VK_F1, MapVirtualKey(VK_F1, 0), 0, 0);

i też się wcisnęło tylko raz...

 

Wniosek jest prosty, trzeba jeszcze przekazać wiadomość, że ten klawisz się puściło. Właśnie, że nie wiem jak

Podpatrując to co robiłem wcześniej to by było coś takiego:

 

keybd_event( VK_F1, MapVirtualKey(VK_F1,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);

Nie wywala błędów, ale keybd_event dalej tylko raz się wykonuje, czyli nie działa tak jak chcę.

Pomocy

Opublikowano

albo nie potrafisz czytać ze zrozumieniem, albo robisz sobie jaja

 

Jeżeli nie masz podstaw programowania to nie wiesz co zrobić z moim kodem, a dzieki niemu klawisze dzialaja tylko i wylaczne na gre. :)

 

No ale trudno chciałem pomóc. Ale komuś kto nie ma podstaw to nie ma sensu.

 

Pozdrawiam i pa . :)

MultiClient Pod Tibię 8.62

22.09.2010

100% Made by Me

Opublikowano

Ktoś podpowie, jak od kliknąć wciśnięty klawisz?

 

Na pewno używasz flagi KEYEVENTF_KEYUP która oznacza że klawisz zostaje zwolniony?

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

Opublikowano

void guzik()
{

HWND hwnd;
//hwnd = GetForegroundWindow();  
       hwnd = FindWindow("klasa","okno"); //cenzura, szuka dobrze, to wyzej tez dobrze dziala
if (NULL != hwnd)
{
	keybd_event(VK_F1, MapVirtualKey(VK_F1, 0), 0, 0);

}
}

void wyciskarka ()
{
int stoper;
stoper = 0;

while(1)
{
	if((stoper<1)&&(info.health_points<100))
	{ 

		guzik();
		stoper=150000;

	}
	stoper--;
}
_endthread();
}


// W Mainie //

_beginthread(wyciskarka,0,0);

 

Działa to tak, że keybd_event wykonuje się tylko raz... , żeby się wykonało ponownie (znów 1 raz) ,trzeba np: alt tab i powrócić do okna gry, lub 1 raz wcisnąć fizycznie F1. Wtedy gra ten 1 raz nie widzi F1 podczas fizycznego wciśnięcia, natomiast gdy nastąpi zdarzenie keybd_event to gra znów tylko 1 raz się wykona... Jestem przekonany w tym, że problem tkwi w programowym puszczeniu guzika. Tak jak bym wciskał cały czas, ale gra widzi że ten klawisz już jest wciśnięty, więc ponownie go nie wciska...

 

 

ps. Gdy robię jak mówi PsychoBoy11, (kod poniżej) to wtedy w cale nie działa... w ogóle, nawet ten 1 raz nie działa.

void guzik()
{
HWND hwnd;
//hwnd = GetForegroundWindow();  
       hwnd = FindWindow("klasa","okno"); //cenzura, szuka dobrze, to wyzej tez dobrze dziala

	if (NULL != hwnd)
	{
              keybd_event(VK_F1, MapVirtualKey(VK_F1, 0), 0, 0);
                     keybd_event(VK_F1, MapVirtualKey(VK_F1, 0), KEYEVENTF_KEYUP, 0);   //tak
                     //keybd_event(VK_F1, MapVirtualKey(VK_F1, KEYEVENTF_KEYUP), 0, 0);//lub tak

	}
}

Opublikowano

Spróbuj zrobić to tak:

keybd_event(VK_F1, 0, 0, 0);
::Sleep(20);
keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0);

 

Próbowałeś z funkcją SendInput / SendMessage? No i tu chyba ma też znaczenie gra, bo gry używające DirectX mają Direct keyboard hooking

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

Opublikowano

Sprawdź czy tutaj musisz też 'podnieść' klawisz. u mnie działa perfekcyjnie..

int main()
{
HWND last;
HWND s = FindWindowA("Saper",0);
DWORD ProcId = 0;
GetWindowThreadProcessId( s, &ProcId );
HANDLE p = OpenProcess(PROCESS_VM_READ,0,ProcId);

int val;

while(true)
{
ReadProcessMemory(p,(void*)0x100579C,&val,4,0); // adres czasu
last = GetForegroundWindow();
if(val > 3 )
{
	SetForegroundWindow(s);
	keybd_event(VK_F2,0,0,0); // restart gry
	SetForegroundWindow(last);
}
Sleep(25);
}

}

Opublikowano

t3ix:

 

GetWindowThreadProcessId( s, &ProcId );

HANDLE p = OpenProcess(PROCESS_VM_READ,0,ProcId); //<- tu wywala

 

error C2275: 'HANDLE' : illegal use of this type as an expression

error C2065: 'p' : undeclared identifier

error C2143: syntax error : missing ';' before 'identifier'

syntax error : '<Unknown>' should be preceded by '<Unknown>'

syntax error : '<Unknown>' should be preceded by '<Unknown>'

syntax error : missing ';' before identifier 'p' illegal use of this type as an expression

 

robię w VS2003NET

 

Myślę, że przez keybd_event nie da się tego zrobić...

Jak tutaj użyć 'Direct keyboard hooking' ?

 

 

 

Ps. Tak przez przypadek zrobiłem coś takiego

void guzik()
{
HWND last;
HWND s;

s = FindWindow("clasa","okno");//gra
       last = FindWindow(0,"XYZ");// co kolwiek np notatnik

if (NULL != s)
{
	SetForegroundWindow(s);
	rest(10);
	keybd_event(VK_F1, MapVirtualKey(VK_F1, 0), 0, 0);
	rest(20);
	SetForegroundWindow(last);
	rest(10);
	SetForegroundWindow(s);
	rest(10);
}

}

 

Coś takiego mi działa , no tylko że obraz mryga...

Opublikowano

Słuchaj 13 latku, nikt Ci nie poda gotowego kodu (wiem to z doświadczenia), najpierw naucz się podstaw C++ potem bierz się za pisanie botów...

Nikt nie pomoże oszustom którzy przekopiują kod i wstawią jako własnego bota.

Temat do zamknięcia a autora proszę o nagrodzenie warnem, gdyż podano mu gotowe funkcje... (SendMessege()).

Pozdrawiam,

Animax.

Wygląd mnie pierdoli, tak samo jak reputacja i twoje zdanie...

Opublikowano

Słuchaj 13 latku, nikt Ci nie poda gotowego kodu (wiem to z doświadczenia), najpierw naucz się podstaw C++ potem bierz się za pisanie botów...

Nikt nie pomoże oszustom którzy przekopiują kod i wstawią jako własnego bota.

Temat do zamknięcia a autora proszę o nagrodzenie warnem, gdyż podano mu gotowe funkcje... (SendMessege()).

Pozdrawiam,

Animax.

 

Zdaje się, że forum jest od tego, aby pomagać, a jak nie chcesz tu pomagać to nie pomagaj i tyle.

 

 

t3ix:

 

GetWindowThreadProcessId( s, &ProcId );

HANDLE p = OpenProcess(PROCESS_VM_READ,0,ProcId); //<- tu wywala

 

error C2275: 'HANDLE' : illegal use of this type as an expression

error C2065: 'p' : undeclared identifier

error C2143: syntax error : missing ';' before 'identifier'

syntax error : '<Unknown>' should be preceded by '<Unknown>'

syntax error : '<Unknown>' should be preceded by '<Unknown>'

syntax error : missing ';' before identifier 'p' illegal use of this type as an expression

 

robię w VS2003NET

 

Myślę, że przez keybd_event nie da się tego zrobić...

Jak tutaj użyć 'Direct keyboard hooking' ?

 

 

Co do błędów dołączyłeś na początku biblioteke windows.h przed jakąkolwiek definicją?

Co do hookowania klawiatury nie znam się na tym, tu jest jakiś tut o tym:

http://www.codeguru.com/cpp/w-p/system/keyboard/article.php/c5699

Chcesz zarobić na własnym cheacie/bocie? Pisz na PM

Cracking, analiza programu/strony, boty (także web), cheaty

kwoh2cmd.png

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...