Solved

API to Capture Keystrokes

Posted on 1998-09-08
2
458 Views
Last Modified: 2008-02-01
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
Comment
Question by:RMiller
2 Comments
 
LVL 12

Expert Comment

by:fulscher
Comment Utility
You'll need some callbacks and your own window handler to capture the messages.
0
 
LVL 14

Accepted Solution

by:
waty earned 100 total points
Comment Utility
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

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

Article by: Martin
Here are a few simple, working, games that you can use as-is or as the basis for your own games. Tic-Tac-Toe This is one of the simplest of all games.   The game allows for a choice of who goes first and keeps track of the number of wins for…
Enums (shorthand for ‘enumerations’) are not often used by programmers but they can be quite valuable when they are.  What are they? An Enum is just a type of variable like a string or an Integer, but in this case one that you create that contains…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now