Tein juuri sellaisen pienen login aohjelman Q-basicilla joka kysyy ensin login namea ja sitten passwordia mutta haluaisin teitää että miten saan suljettua ne näppäimmet joilla pystyy ohittamaan ohjelman. Kun käynnistää ohjlelman ja painaa esim. ctrl+c (vai) k niin hyppää ohjelman yli. saisiko niitä suljettua?
Ja sitten vielä että passwordin kirjoittaa tulee suoraan näytölle mitkä olen kirjoittamassa. Saisiko siihen laitettua esim ******* noita merkkejä ettei kaveri nää mitä kirjoitan?
Hyppää ohjelman yli? Joka tapauksessa, CTRL+C:n ja CTRL+BREAK:n disabloiva koodi olisi tällainen (ei omaa tekoa, vaan minuutin googletuksen tulosta):
'QBasic NoBreak v1.0a 'Copyright (c)1995 by Daniel Trimble 'Public Domain - use at your own risk. CLS DO KEY 15, CHR$(4 + 128 + 32 + 64) + CHR$(70) ON KEY(15) GOSUB NoBreak: KEY(15) ON KEY 16, CHR$(4 + 128) + CHR$(70): ON KEY(16) GOSUB NoBreak: KEY(16) ON KEY 17, CHR$(4 + 128 + 32) + CHR$(70): ON KEY(17) GOSUB NoBreak KEY(17) ON: KEY 18, CHR$(4 + 128 + 64) + CHR$(70): ON KEY(18) GOSUB NoBreak KEY(18) ON: KEY 19, CHR$(4) + CHR$(70): ON KEY(21) GOSUB NoBreak KEY(21) ON: KEY 22, CHR$(4 + 64) + CHR$(70) ON KEY(22) GOSUB NoBreak: KEY(22) ON: KEY 23, CHR$(4 + 32) + CHR$(46) ON KEY(23) GOSUB NoBreak: KEY(23) ON: KEY 24, CHR$(4 + 64) + CHR$(46) ON KEY(24) GOSUB NoBreak: KEY(24) ON KEY 25, CHR$(4 + 32 + 64) + CHR$(46): ON KEY(25) GOSUB NoBreak: KEY(25) ON LOCATE 1, 1, 0: PRINT "QBasic NoBreak v1.0a" LOCATE 2, 1, 0: PRINT "Copyright (c)1995 by Daniel Trimble" LOCATE 4, 1, 0: PRINT "This program and all source is public domain. I will not be held responsible" LOCATE 5, 1, 0: PRINT "for any damage this program may cause. I am not at fault; use this at your" LOCATE 6, 1, 0: PRINT "own risk - period!" LOCATE 15, 1, 0: PRINT "Try pressing either CTRL-BREAK or CTRL-C. Nothing will happen!" LOCATE 16, 1, 0: PRINT "To end the program, hit ENTER." IF INKEY$ = CHR$(13) THEN END LOOP NoBreak: RETURN 'ctrl =4 extended keys=128 'num lock=32 c=46 'cap lock=64
Ja sitten siihen toiseen kysymykseen eli sehän menisi jotenkin niin, että loopisi tarkkailisit käyttäjän painamia nappeja (INKEY$), ja lisäilisit niitä johonkin stringiin, jonka pituuden mukaan sitten ulostaisit tähtiä ruudulle.
Samalla aina tarkistaisit, että jos näppäin on return ("enter") (CHR$(13)) niin lopetat loopin ja jatkat ohjelmaa, jos se on backspace (ei nyt muistu koodi mieleen mutta tsekkaa se näppäinkoodi-referenssi) niin lyhennät sitä stringiä lopusta päin :)
Toivottavasti auttoi.. valmista koodia minulla ei ole tapana antaa.
Tein vielä tuon fawkzin neuvoman funktion aamupuhteiksi, ettei itse tarvitse päätä vaivata...;) Eli tuo palauttaa käyttäjän kirjoittaman salasanan merkkijonona ja max% on salasanan maksimipituus.
FUNCTION PyydaSalasana$ (max%) DO a$ = INKEY$ SELECT CASE a$ CASE "a" TO "z", "A" TO "Z", "0" TO "9" IF LEN(y$) < max% THEN y$ = y$ + a$ PRINT "*"; END IF CASE CHR$(8) LOCATE CSRLIN, LEN(y$) PRINT " "; LOCATE CSRLIN, LEN(y$) y$ = LEFT$(y$, LEN(y$) - 1) CASE CHR$(13) EXIT DO END SELECT LOOP PyydaSalasana$ = y$ END FUNCTION
Kiitoksia vinkeistä, auttoivat kovasti!
Aihe on jo aika vanha, joten et voi enää vastata siihen.