Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Tekstin liittäminen/kirjoittaminen jostakin tietystä napista?

Sivun loppuun

miikkiz [12.06.2005 23:28:21]

#

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ä.

Juice [12.06.2005 23:39:31]

#

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.

miikkiz [13.06.2005 02:59:14]

#

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?

Harrastelija [13.06.2005 09:00:17]

#

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

miikkiz [13.06.2005 12:23:27]

#

Tavalliseen koodiin sitä ajattelinkin, mutten keksinyt/saanut toimimaan sitä :S Eli miten upottaisin tuon tavalliseen koodiin?

T.M. [13.06.2005 12:28:58]

#

Öh? mitä järkeä? mikset vain tee lyhyempiä ja selvempiä huijauskoodeja :P

Metabolix [13.06.2005 12:36:17]

#

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

miikkiz [13.06.2005 13:10:41]

#

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.

Harrastelija [13.06.2005 13:59:57]

#

laita
sub haluamasi ()
koodisi
end sub
ja johonkin vaiheesee haluamasi.. yksinkertaista..??

Spongi [13.06.2005 15:11:23]

#

Pistä Form_Load subin alkuun Show, siis ennen looppia, niin formi tulee näkyviin.

miikkiz [13.06.2005 15:24:39]

#

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?

Juice [13.06.2005 18:31:09]

#

Kokeile WinAPIlla: http://www.vbaccelerator.com/home/VB/Tips/SendKeys_using_the_API/article.asp

miikkiz [13.06.2005 21:00:39]

#

Juice, eipä auttanut :< Sama homma, muistiolla yms. testatessa kyllä toimii, muttei itse pelissä. Ei tästä sitten näköjään tullutkaan mitään :<

miikkiz [16.06.2005 01:55:08]

#

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?

Merri [16.06.2005 03:20:18]

#

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.

JoreSoft [16.06.2005 10:52:59]

#

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

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta