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 FUNCTIONKiitoksia vinkeistä, auttoivat kovasti!
Aihe on jo aika vanha, joten et voi enää vastata siihen.