07. maj 2002 - 00:16Der er
8 kommentarer og 1 løsning
Fang keyboardinput
Hej. Jeg er vil lave et prgm som opsnapper alt hvad der bliver indtastet på tastaturet ligegyldgt hvor i windows hvor man befinder sig, og skriver disse i en txt fil eller sådan noget. Hvordan gør man sådan noget?...altså hvordan fanger man keyboardinput?
jeg har prøvet at hente den ned, og køre den. Den fanger keyboardevents som den skal, men den bruger også en speciel dll som han har pakket sammen med selve programmet. Jeg ved at man kan fange keyboardtryk uden at skulle bruge en sådan dll-fil vha af api-kald og user32 filen, som ligger i system32 mappen. Det er denne løsning som jeg er lidt udeefter, så jeg kan gøre det så simpelt som muligt. Ved du eller andre hvordan det gøres?
jeg er kommet lidt frem til at det måske er noget i retning af Private Declare Function GetKeyboardState Lib "user32.dll" (lpKeyState As Byte) As Long som jeg skal bruge...men jeg forstår ikke helt hvordan den skal bruges eftersom det jo er en funktion der skal kaldes før den bliver aktiv. Og at kalde den kan jeg godt, men det er jo ikke mig der skal udløse den. Meningen er bare at hver gang brugeren trykker på en tast ligegyldigt hvor i windows man er så skal værdien af tasten sendes hen til min applikation.
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Function GetPressedKey() As String Dim i As Integer For i = 32 To 128 'A-Z If GetAsyncKeyState(i) <> 0 Then GetPressedKey = Chr$(i) Exit For End If Next i End Function
Private Sub Form_Load() Call GetPressedKey Timer1.Interval = 10 End Sub
Private Sub Timer1_Timer() Me.Caption = GetPressedKey End Sub
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Function GetPressedKey() As String Dim i As Integer Dim AddKey As String For i = 0 To 255 'Alle Keys If GetAsyncKeyState(i) <> 0 Then Select Case i Case 16, 17, 18 'SHIFT = 16 'CTRL = 17 'ALT = 18 'ALTGR = 1718 AddKey = AddKey & i Case Else AddKey = AddKey & Chr$(i) End Select End If Next i GetPressedKey = AddKey End Function
Private Sub Form_Load() Call GetPressedKey Timer1.Interval = 10 End Sub
Private Sub Timer1_Timer() Me.Caption = GetPressedKey End Sub
jeg kan fange keyboardevents med den kode, men jeg vil også gerne kunne gemme dem, så jeg ændrede Me.Caption = GetPressedKey til Text1 = Text1 & GetPressedKey og lavede og tekstfelt der hed text1. Den kan stadig godt fange keyboardevents, men når jeg skriver noget alle andre steder end lige når formen er aktiv, så fanger den ikke noget, og det var jo ikke det der var meningen. Den skal jo helst fange ALLE keyboardinput.
>ændrede fra Me.Caption = GetPressedKey til Text1 = Text1 & GetPressedKey<
Private Sub Timer1_Timer() Static Oldkey As String Dim Newkey As String Newkey = GetPressedKey If Newkey <> Oldkey Then Oldkey = Newkey Text1.Text = Text1.Text & Newkey End If End Sub
>end lige når formen er aktiv, så fanger den ikke noget< Det kan jeg ikke få til at passe, for det gør den hos mig.
Synes godt om
Ny brugerNybegynder
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.