Tarvitsisi tehdä erääseen peliin tuollainen ohjelma, jossa huijauskoodit ovat tyyliin rivi siansaksaa, esimerkiksi EWASERTHJ. Näitä on vaikea muistaa, joten olisi kiva koodata pieni ohjelma tätä varten. Mitenköhän se pitäisi koodata, että vaikka ohjelma pyörisi pelin taustalla, ja kun painaa jotain nappia, esimerkiksi nyt vaikka F1:stä, ohjelma näpyttelisi tuon huijauskoodin EWASERTHJ peliin? Näin noita koodeja olisi paljon helpompi käyttää kun voisi vain jotain tiettyä nappia painaa. Koodauksen haluaisin suorittaa joko Visual Basic 6:lla tai .net:llä.
Taustalla on ohjelmasi, jossa GetASyncKeyStatella selvität, jos F1 painetaan, ja jos painetaan, SendKeys jatkaa. Pseudo-dotnet
If GetASyncKeyState(Keys.F1) Then SendKeys.Send("EWASERTHJ")
GetAsyncKeystate on winapi-funktio, joten se täytyy erikseen määritellä koodin alussa.
Vielä pyytäisin pientä apua. Testailin nyt tuota muistiolla, niin joskus käy niin, että F1:stä painaessa näppäin ikäänkuin jumiutuu ja ohjelma kirjoittaa monta kertaa peräkkäin tuon koodin, mitenköhän sen pystyisi estämään vaikka niin että kun F1:stä näpäyttää se lähettää yhden kerran sen koodin? Nyt tuo SendKeys- ja GetAsyncKeyState ovat timerissä jonka intervalli on 200. Olisikohan vielä joku parempi objekti mihin laittaa nuo?
timer toistaa tuota loputtomiin. laita interval 1 ja timerin loppuun timer1.enabled = false, jos nyt timeriä välttämättä haluat käyttää. Parempi tapa kylläkin olisi sijoittaa se luultavasti tavalliseen koodiin. f1 tuskin on paras mahdollinen painike, kun siitä käynnistyvät aina lähimmän alueen ohjeet.. :D
Tavalliseen koodiin sitä ajattelinkin, mutten keksinyt/saanut toimimaan sitä :S Eli miten upottaisin tuon tavalliseen koodiin?
Öh? mitä järkeä? mikset vain tee lyhyempiä ja selvempiä huijauskoodeja :P
T.M., kyseessä ei taida olla hänen oma pelinsä, veikkaan. Muutenhan tuo huijaussysteemi tehtäisiin peliin itseensä debug-vaiheessa toimimaan noin.
Tee jonnekin (Vaikka Form_Loadiin) loputon silmukka, jossa tarkistat nuo näppäimet, ja laita silmukan loppuun DoEvents. Viiveeksi voi laittaa vaikka Sleep(100) tai jotain, jos ei jaksa muuten tehdä tarkistusta, tai sitten näin (pseudo):
Do ' Tarkistetaan F1 If GetAsyncKeyState(Keys.F1) Then SendKeys.Send("EWASERTHJ") Painettu = True ' merkitään, että jotain painettiin End If ' Doevents; Ei kai siinä ole Me edessä? DoEvents ' Jos jotain painettiin, odotetaan, ettei tule liian tiheitä painalluksia If Painettu Then Sleep(200) : Painettu = False ' Ja tämä voi olla turha, mutta varmistetaan, ettei ohjelma syö kaikkea tehoa Sleep(10) Loop
Kiitoksia Metabolix, tuolla rupesi toimimaan! Kiitos myös muille auttaneille!
EDIT:
Olisikohan sitä mahdollista laittaa johonkin muuhun kuin form_loadiin, kun nyt koko formi ei aukea, mutta muuten toimii hyvin.
laita
sub haluamasi ()
koodisi
end sub
ja johonkin vaiheesee haluamasi.. yksinkertaista..??
Pistä Form_Load subin alkuun Show, siis ennen looppia, niin formi tulee näkyviin.
Juu, nyt toimii ihan hyvin kun muistiossa/wordissa tai missä tahansa koittaa, niin se kirjoittaa sen koodin kun tiettyä näppäintä painetaan. Kuitenkaan itse pelissä ne eivät toimi, mistäköhän voisi johtua? Peli on siis ihan full-screen peli eikä mikään Windowsin pasianssin tapainen, eikä pelissä ole määrittelemilleni näppäimille mitään toimintoja, eli ne ovat vapaita. Missä vika?
Kokeile WinAPIlla: http://www.vbaccelerator.com/home/VB/Tips/
Juice, eipä auttanut :< Sama homma, muistiolla yms. testatessa kyllä toimii, muttei itse pelissä. Ei tästä sitten näköjään tullutkaan mitään :<
Olisiko mahdollista koodata se jotenkin niin että se syöttäisi sen koodin johonkin tiettyyn ikkunaan, esim. jos ikkunan nimi olisi "Peli v. 1.0" niin se syöttäisi sen vain tuohon ikkunaan?
Pahimmassa tapauksessa joudut subclassaamaan pelin, nappaamaan sen DirectX-kutsut, tutkia siitä mitkä ovat näppäimistölle, ohjata ne kiertämään oman ohjelman kautta ja sitten palauttamaan lopputuloksen... eli joo, pelit voivat olla aika kinkkisiä. Ja tuo toimisi vain yhdelle pelille kustomoituna.
Siksi tämäntyylisiä ohjelmia ei taida ollakaan tehtynä.
Muuten, tuo ewaserthj on aika helppo kirjoittaa.
Itse tekisin sen niin että ohjelmassa talletettaisiin näppäimen painallus jonon viimeiseksi, ja katkaistaisiin toi jono koodin pituuteen.
Dim Cheat$ Private Sub Form_KeyPress(KeyAscii As Integer) Cheat = Cheat & LCase(Chr(KeyAscii)) Cheat = Right(Cheat, 18) If Right(Cheat, 8) = "salasana" Then MsgBox "cheat!!" Label1.Caption = Cheat End Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.