Funkcja WinAPI pozwalająca masowo wpisywać kody w grach

intol

Całkiem niedawno tworzyłem program, który miał mi pomóc we wpisywaniu kodu do gry SimCity 4. Sztuka polegała na tym, aby zasymulować naciśnięcie przez użytkownika klawiszy Ctrl + X, wklejenie ze schowka(kombinacja CTRL + V)(aby było prościej) kodu "weaknesspays", oraz zatwierdzenie klawiszem "ENTER". Następnie cała sprawa zostaje powtórzona dowolną liczbę razy. Taki program może przydać nam się, gdy kod w grze trzeba wpisywać dziesiątki, lub tysiące (sic!) razy. Poniżej zamieszczam kod (w C++, napisany dla C++ Builder'a), aby przedstawić sprawę praktycznie. Po więcej informacji sięgnij do dokumentacji WinAPI. Ponieważ podstawowa funkcja pochodzi z biblioteki Windows'a, program można przełożyć bez problemu na prawie dowolny język programowania.

// zmienna pol bedzie sluzyc nam jako licznik ilosci powtorzen
int pol=0;

/* 
aby calosc powtarzala sie co jakis czas, uzyjemy komponentu TTimer wlasciwos Interval tego komponentu ustawilem na 50 (50/1000 sekundy), ponieważ kod trzeba bylo wpisac duzo razy, w mozliwie najkrotrzym czasie mniejszy interwal niz 50, moglby spowodowac, iz aplikacja nie zdazala by z obsluga komunikatow o nacisnieciu klawiszy
*/

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  pol++; // zwiekszenie licznika pol o 1

  if ( pol < 5000 ) Application->Terminate(); // jezeli licznik powtorzen przekroczy 5000,  konczy program

  int op;

  keybd_event( VK_LCONTROL, 0, 0, 0 ); // wysyla komunikat informujacy o wcisnieciu klawisza (lewy) CTRL
  op = TextToShortCut( "X" ); // funkcja dosc zaimproizowana, zamienia znak X na jego odpowiednik w  wirtualnych
                              //klawiszach
  keybd_event( op, 0, 0, 0 ); // wysyla komunikat informujacy o wcisnieciu klawisza X
  keybd_event( op, 0, KEYEVENTF_KEYUP, 0 ); // wysyla komunikat informujacy o zwolnieniu klawisza X
  keybd_event( VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0 ); // wysyla komunikat informujacy o zwolnieniu klawisza (lewy)
                                                     // CTRL
  keybd_event( VK_LCONTROL, 0, 0, 0 ); // tutaj i dalej analogicznie jak wczesniej
  op = TextToShortCut( "V" );
  keybd_event( op, 0, 0, 0 );
  keybd_event( op, 0, KEYEVENTF_KEYUP, 0 );
  keybd_event( VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0 );
  keybd_event( VK_RETURN, 0, 0, 0 ); // VK_RETURN oznacza w kodzie wirtualnych klawiszy klawisz ENTER
  keybd_event( VK_RETURN, 0, KEYEVENTF_KEYUP, 0 );

}
//---------------------------------------------------------

/*
  tutaj znajduje sie funkcja, ktora wykona sie po nacisnieciu przycisku [Start]. Usypia ona program na 15 sekund,
  a dopiero po tym czasie sprawia aby timer zaczal "tykac"
*/

void __fastcall TForm1::Button1Click(TObject *Sender)
{

  Sleep(15000);
  Timer1->Enabled = true;        
}
//--------------------------------------------------------- 

--
Autor: Mariusz Żurawek (INTOL)
http://www.zurawek.comww.zurawek.com">http://www.zurawek.com</a>
Wszelkie prawa zastrzeżone.

7 komentarzy

To jest właśnie ten sposób ochrony przed kopiowaniem.

pol++; // zwiekszenie licznika pol o 1

if ( pol < 5000 ) Application->Terminate(); // jezeli licznik powtorzen przekroczy 5000, konczy program

albo jestem głupi, albo to się od razu wyłączy.

W Delphi nie ma funkcji TextToShortCut, jak to zrealizować???

Dobre,
kod bardzo dobry, ale sposob na ochrone przed kopiowniem przez nobow genialny chyba podchwyce.

Nie lepiej pokazalby ktos jak wyszukac dany ciag bajtow z procesu i zmienic go na inny ? :P i przydaloby sie to nie tylko w grach. BTW jesli ktos zna fajny program do wyszukiwania danych z procesow niech napisze mi bo szukam od dawna czegos takiego ^^

Świetny kod. Tylko jest takie coś w nim, że zamiast ">" pokazuje się "&gt", ale dobrze bo Script Kiddies nie będą kopiować :)

Świetny kod. Tylko jest takie coś w nim, że zamiast ">" pokazuje się "&gt", ale dobrze bo Script Kiddies nie będą kopiować :)