Avatar billede freelancegrafiker Nybegynder
09. januar 2008 - 09:24 Der er 5 kommentarer og
1 løsning

GetAsyncKeyState - gemme resultat i variabel?

Hej..

Jeg vil gerne læse indputtet fra tastaturet og gemme resultatet i en variabel..
F.eks.:

variabel = GetAsyncKeyState()

Men hvordan?
Jeg har prøvet mig frem med GetAsyncKeyState(), men den vil kun virke hvis den har en værdi i sig..

Som her:
GetAsyncKeyState(69)
og så ved jeg ikke hvad man kan bruge den til, andet end:

if GetAsyncKeyState(69) then
variabel = e
end if

Meeen, det bliver hurtigt uoverskueligt hvis man tilføjer flere..

Nogen ideer?
Tak på forhånd
Avatar billede tjacob Juniormester
09. januar 2008 - 16:43 #1
Det du har brug for er i realiteten en Global Low Level Keyboard Hook. Prøv at søge på nogle af disse ord.
Her er en artikel der gennemgår problematikken: http://www.developer.com/net/vb/article.php/2193301
Avatar billede nielle Nybegynder
09. januar 2008 - 22:54 #2
Eller måske noget i denne stil?

While true
    If Console.KeyAvailable Then
        Dim cki As ConsoleKeyInfo = Console.ReadKey(true)

        If (cki.Key = ConsoleKey.Escape) Then
            Exit While
        End If

        ' cki.Modifiers - fort�ller om Alt-, Shift- og Ctrl-tasterne
        Dim c As Char = cki.KeyChar

        Console.WriteLine(c)
    End If
End While
Avatar billede freelancegrafiker Nybegynder
10. januar 2008 - 04:40 #3
Tjacob.. jeg var bange for at nogle skulle forslå hook.. men jeg kigger det igennem..

Jep nielle, noget ligende, men stadig virke selvom consolen/formen ikke er aktiv, ligesom GetAsyncKeyState() kan..
Avatar billede freelancegrafiker Nybegynder
10. januar 2008 - 07:03 #4
Kan ikke få koden fra den artikel til at virke..

Når jeg kalder HookKeyboard()
Går den ned og checker:
Hooked = KeyboardHandle <> 0

som så er false, og den skriver så:
Debug.WriteLine("Keyboard hook failed: " & Err.LastDllError)

som jeg ikke lige ved hva betyder..
Avatar billede tjacob Juniormester
10. januar 2008 - 12:00 #5
Det betyder vel at hooken fejler et eller andet sted.

Du skal være opmærksom på, at du sandsynligvis IKKE kan køre koden i IDEn. Du skal compile, og køre den færdige exe UDEN for IDEn. Desuden kunne jeg godt forestille mig at den heller ikke virker i Vista (hvis du kører det?)

For i øvrigt er koden jo kun et eksempel der, såvidt jeg kan se, blot fanger 3 bestemte tastekombinationer.

Hvis du skal fange alle tastetryk skal der en hel del mere kode til, og der skal jo også laves en log af en art.
Avatar billede freelancegrafiker Nybegynder
12. januar 2008 - 12:57 #6
Fandt en måde at gemme resultaten i en variabel
Har lidt svært ved at forstå det, men det virker..

Ellers tak for hjælpen, men de der global hooks er alt for avanceret for mit lige nu :P
___

        Do
            For i = 1 To 255
                result = 0
                result = GetAsyncKeyState(i)

                If result = -32767 Then
                    i = Chr(i)
                End If
            Next i
        Loop
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester