Dobrý den ,
chtěl bych simulovat "klikání" uživatele v různých programech. To znamená, že spustím svůj program, on si otevře potřebnou aplikaci, kde bude klikat myší podle mého algoritmu - měl by se rozhodovat podle změny v programu a být schopen rozpoznat číselné hodnoty a porovnat obrázky. Je to velice podobné automatickému testování. Nastává otázka v čem to naprogramovat?
Děkuji moc za každou odpověď.
Fórum › C / C++
V čem programovat ovládání aplikací ve windows
![](img/forum_vlakno_help_vyreseno.png)
Když to píšeš do C++, tak bych to pravděpodobně dělal ve WinAPI. Ale bude to poměrně složité. Možná se zkus podívat po nějakém vyšším programovacím jazyku.
pozn. něco podobného jsem dělal v Javě, chtěl sjem simulovat stisk kláves...původně to mělo sloužit jako bot do jedné hry O:) Zjistil jsem, že to fungovalo např. v prohlížeči, nebo v souborech, ale v té hře to nefungovalo :(
Tady bude asi řeč o tzv. Hooking (Hookování) a reverzním inženýrstvý.
Pomocí té první metody můžeš zhotovit to klikání, a to tak že můžeš použít třeba DLL injekci. To znamená že do procesu tedy té tvé aplikace injekneš tvůj kod který by měl třeba simulovat klikání a to skrz kod v dll knihovně. Pak jednoduše můžeš simulovat kliknutí přes funkci Sendkeys(). Nebo je také možnost hooknout grafické rozhraní na kterém aplikace běží (Directx, OpenGL, možná i GDI++ ...). Jde o to že tyto rozhraní (API) poskytují vývojářův funkce které pak využívají v aplikaci, třeba taková funkce pro kliknutí myši se souřadnicemi. Je tedy možnost tuto funkci hooknout a poté ji volat přes jinou externí aplikaci či tedy DLLi. Na různých forech je mnoho příkladů s hookováním, ale i tyto pouhé jednoduché příklady dá někdy práci uvést do chodu.
S těma číselnýma hodnotama souvisí reverzní inženýrství. Jde o to že taková jakákoliv číselná hodnota je někde uložená v paměti na určitém místě v RAM. Takže ty musíš najít tu adresu kam se ta proměná uložuje. Tu adresu můžeš najít třeba s takovým Cheat Enginem. Jestli teda najdeš tu adresu možná to ještě není celý musíš totiž najít tzv. pointer, statickou adresu která má stálou adresu. Nějaké techniky typu ASLR se tomu snaží zabránit tím že adresy nejsou stálé. Musíš tedy najít offset adresy a s pomocí basse adresy zkalkulovat výslednou hledanou adresu. Pokud tedy najdeš zprávnou adresu pak už jí jenom vyčteš z aplikace a porovnáš s čím budeš chtít po vyhodnocení kodu třeba proběhne ten tvůj klik myše.
Stím obrázkem už nemáš šanci ani zdaleka leda že bys našel třeba proměnou určující typ obrázku. Ale to zůstaneš pořád u stejného problému jak to jen udělat, a nakonec stím sekneš.
Jakyk je nejideálnější C++, nejspíše i v C# by to šlo, nebo také v Delphi.
Reverzní inženýrství je metoda vyžadující opravdu perfektní znalost programování a jeho strukturu, tedy co se děje po kompilaci a spuštení aplikace a co se děje v paměti. Jak program pracuje s proměnými, adresy a volání funkcí. Hodně se tímto zabývají crackeři, hakeři který pak tuto metodu uplatní třeba v cracku nebo v cheatu. Zkrátka jestli ani neumíš pořádně programovat raději se do toho ani nepouštěj, protože to vážně nemá cenu.
Snažil jsem se to nějak "stručně" objasnit a vysvětlit a to i pro ty které by to také zajímalo. Českých for zabývajícím se tímto moc neni, řekl bych že skoro žádná. Pokud by tě to doopravy zajímalo a chtěl bys to zkusit určitě najdeš nějaké návody v angličtině.
Ale já myslím že skončíš u prvního odstavce se čtením :D.
(Gramatiky si nevšímejte ...)
Dekuji moc za vycerpavajici odpoved. Jako programator se povazuji za zacatecnika - ucil jsem se v pascalu, assembleru, C a asi nejvic jsem delal ve VBA. Je mi jasne ze to bude beh na dlouhou trat, proto jsem chtel hlavne nasmerovat na nejvhodnejsi programovaci jazyk a vyvojove prostredi abych po roce nezjistil "ze to proste nejde udelat". Co se tyce obrazku: jedna se o mnozinu 60 obrazku, jejich velikost bude velice mala (600 - 800 bajtu). Moje naivni predstava by byla obrazek "printScreenout" , orezat podle souradnic, ulozit do vhodneho formatu - cernobile a pak porovnat (binarni) kod.
![](img/forum_nove_psp_new.png)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
![](/img/smile/1.gif)
![](/img/smile/2.gif)
![](/img/smile/3.gif)
![](/img/smile/4.gif)
![](/img/smile/5.gif)
![](/img/smile/6.gif)
![](/img/smile/7.gif)
![](/img/smile/8.gif)
![](/img/smile/9.gif)
![](/img/smile/10.gif)
![](/img/smile/11.gif)
![](/img/smile/12.gif)
![](/img/smile/13.gif)
![](/img/smile/14.gif)
![](/img/smile/15.gif)
![](/img/smile/16.gif)
![](/img/smile/17.gif)
![](/img/smile/18.gif)
![](/img/smile/19.gif)
![](/img/smile/20.gif)
![](/img/smile/21.gif)
![](/img/smile/22.gif)
![](/img/smile/23.gif)
![](/img/smile/24.gif)
![](/img/smile/25.gif)
![](/img/smile/26.gif)
![](/img/smile/27.gif)
![](/img/smile/28.gif)
![](/img/smile/29.gif)
![](/img/smile/30.gif)
![](/img/smile/31.gif)
![](/img/smile/32.gif)
Uživatelé prohlížející si toto vlákno
Podobná vlákna
V čem programovat grafiku C++ — založil anonym
Web aplikace - v čem programovat? — založil Pixtr
V čem vytvořit aplikaci běžící bez OS — založil Lancelot007
V čem vytvořit aplikaci běžící bez OS — založil Lancelot007
Detekce ovládání myši skrz aplikaci v c#, detekce bota v c# — založil ejtix
Moderátoři diskuze