Rupesin tossa väsäämään keyloggeria delphillä apia käyttäen
if GetAsyncKeyState(numero)=-32767 then...
Mut vasta lopussa tajusin et eihän noi nyt joka näppäimessä samat oo esim jos numero on 222 se printtaa ä mut entäs jos jollakin on enkuksi säädetty näppäimet... 222 on sillon '
eli onko mitään helppoa keinoa tehdä niin että se printtaa sen kirjaimen joka siitä kuuluu tulla näppäimistöstä riippuen?
Varma en koskaan ole, mutta jotenkin täytys näppikset varmaan tunnistaa?
tuo ongelma on ilmeisesti UTF-8 ongelma, jota ei pitäisi olla 16bit unique merkistönkanssa. Merkistön vaihtaminen samaksi on toinen vaihtoehto, mutta vielä vaikeampi vain. Esim. Java käyttää oletuksena aina unique merkistöä, mutta muuta en sitten tiedäkkään.
Katsele MSDN:stä GetAsyncKeyState:n kanssa samaan kategoriaan kuuluvia funktioita, jos niistä jokin auttaisi.
Hmm siis oon tehny tyylillä
if GetAsyncKeyState(222)=-32767 then text1.text := text1.text + 'ä'
mut jos jollakin on englannin kielinen näpäimistö tuo ä pitäisi olla '
Pascal/Delphi taidot on mulla vähän ruosteessa, mutta veikkaan että ongelmasi ratkeaa kun lisäät textisi perään merkin koodilla etkä käyttäen tuota merkkiä.
if GetAsyncKeyState(222)=-32767 then text1.text := text1.text + 222
hmm muuten hyvä mutta ä ei tule 222...
eli
if GetAsyncKeyState(222)=-32767 then text1.text := text1.text + #222
ei toimi
Hetkinen 222 ei ole koskaan tietääkseni ollut ä, vaan #132 -> ä. 132 on ä myös unique merkistössä, joka on kaikissa maissa ja kielissä samanlainen aina kiinaa ja japania myöten.
http://www.lookuptables.com/
panttu kirjoitti:
Hetkinen 222 ei ole koskaan tietääkseni ollut ä
Kyllä se jossain merkistökoodauksessa *voi* ollakin.
panttu kirjoitti:
132 on ä myös unique merkistössä, joka on kaikissa maissa ja kielissä samanlainen aina kiinaa ja japania myöten.
Eikä ole. Unicodessa ä on 0xe4 (228).
ASCII on 7-bittinen merkistö, ts. siinä on 128 merkkiä (kuten lookuptables.comistakin huomaat, jos katsot vähän tarkemmin). Yleisesti on käytössä 8-bittisiä merkistöjä, joissa nuo 128 seuraavaa merkkiä on milloin mitäkin, tuo lookuptables.comin taulukko esittää ilmeisesti jotain MS-DOSin koodisivua, jolla on varsin vähän relevanssia nykyään.
Kyllä tuo D4_B34M:n tapa lisätä yksi merkki toimii. Ei tarvitse käyttää char-koodia.
Nähdäkseni jotkut eivät nyt kuitenkaan ymmärtäneet itse ongelman ydintä :) Jaksoinpa nyt etsiä mokoman funktioyhdistelmän (kyllä ne olisi itsekin voinut MSDN:stä hakea, sieltä GetAsyncKeyStaten osastolta):
Nappi := 222; if (GetAsyncKeyState(Nappi) < 0) then Text1.Text := 'Nappi ' + Char(MapVirtualKeyEx(Nappi, 2, GetKeyboardLayout(0))) + ' on pohjassa.';
Tuo toimii ainakin minulla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.