Avatar billede bumle90 Nybegynder
07. maj 2002 - 00:16 Der 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?
Avatar billede tjacob Juniormester
07. maj 2002 - 10:13 #1
Det er ikke nogen simpel ting, men prøv at se på denne her:

http://www.allapi.net/vbexamples/vbexample.php?vbexample=DSKEYBRD&category=MISC

/tjacob
Avatar billede bumle90 Nybegynder
07. maj 2002 - 10:38 #2
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?
Avatar billede tjacob Juniormester
07. maj 2002 - 10:56 #3
Jeg vil tro du skal bruge disse 3:
CallNextHookEx
SetWindowsHookEx
UnhookWindowsHookEx

tjek: http://www.allapi.net/

for at se hvordan de anvendes (der er også eksempler)

/tjacob
Avatar billede bumle90 Nybegynder
07. maj 2002 - 14:15 #4
men de bruger jo også den dll fil som han selv sender med
Avatar billede bumle90 Nybegynder
07. maj 2002 - 14:17 #5
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.
Avatar billede sjh Nybegynder
07. maj 2002 - 15:46 #6
'Prøv med koden her, husk en Timer

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
Avatar billede sjh Nybegynder
07. maj 2002 - 16:38 #7
Hvis du skal bruge flere inputs eks: [CTRL]+[A]

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
Avatar billede bumle90 Nybegynder
07. maj 2002 - 18:41 #8
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.
Avatar billede sjh Nybegynder
07. maj 2002 - 21:41 #9
>æ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.
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger en IT-supporterelev til lokal IT på Haderslev Kaserne

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Senior Data Engineers til dataplatform i Forsvaret