Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 470
  • Last Modified:

API to Capture Keystrokes

I need an app to run in the background capturing keystrokes into a sequential file.  VB's OnKeypress won't work for my purposes...I've searched for an API call do do this but without success.
0
RMiller
Asked:
RMiller
1 Solution
 
fulscherCommented:
You'll need some callbacks and your own window handler to capture the messages.
0
 
watyCommented:
you have to use the API :

' *** Get the state of a key at any time
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Try the following code :
Create a new project, and add a Picture Box and a Command Button to the form. Then paste the following code into the form:


Private m_bPlay As Boolean
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub cmdPlay_Click()
Dim i As Long
Dim iLast As Long

    If cmdPlay.Caption = "&Stop" Then
        m_bPlay = False
        cmdPlay.Caption = "&Play"
    Else
        cmdPlay.Caption = "&Stop"
        m_bPlay = True
        i = 1
        Do
            ' Determine if the left or right keys are
            ' pressed:
            If (GetAsyncKeyState(vbKeyLeft)) Then
                ' Diminish the colour
                i = i - 1
            ElseIf (GetAsyncKeyState(vbKeyRight)) Then
                ' Increase the colour
                i = i + 1
            End If
           
            ' Colour within bounds:
            If (i < 1) Then i = 15
            If (i > 15) Then i = 1
           
            ' If colour has changed, change the display:
            If (iLast <> i) Then
                With Picture1
                    .Cls
                    .ForeColor = QBColor(i)
                    ' Generate a RGB complement for the background:
                    .BackColor = &HFFFFFF And (Not QBColor(i))
                    .CurrentX = 64 * Screen.TwipsPerPixelX
                    .CurrentY = 64 * Screen.TwipsPerPixelY
                   
                    Picture1.Print Hex$(QBColor(i))
                End With
            End If
            iLast = i
           
            ' This is here to stop the animation
            ' getting too fast to see:
            Sleep 25
            ' Ensure we can still click buttons etc
            DoEvents
           
        Loop While m_bPlay
           
    End If
   
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If (cmdPlay.Caption = "&Stop") Then
        cmdPlay_Click
    End If
End Sub



When you click on the command button, the code starts a DoEvents loop in which it checks if the Right Key or Left Key are pressed. When one is pressed, it changes the background and foreground colours of the Picture Box and displays the QBColor code.


0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now