Veroland
asked on
Send a keyboard event to an external app
Hi, does anyone know how to send an keyboard event to another application.
ie. simulating a key pressed. Lets say that insted of pressing enter on an app I want to send the enter pressed event to the app.
I think you can do this with the sendmessage api but is not sure.
Anybody have any ideas?
Thnx
Ps. I dont want step by step code, I want more in the lines of ideas
ie. simulating a key pressed. Lets say that insted of pressing enter on an app I want to send the enter pressed event to the app.
I think you can do this with the sendmessage api but is not sure.
Anybody have any ideas?
Thnx
Ps. I dont want step by step code, I want more in the lines of ideas
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Cool, thanks it workes.
Great :§}
Try the sendkeys function
' * Programmer Name : Waty Thierry
' * Web Site : www.geocities.com/ResearchTriangle/6311/
' * E-Mail : waty.thierry@usa.net
' * Date : 24/09/98
' * Time : 13:36
' * Module Name : class_SendKeys
' * Module Filename :
' **************************
' * Comments : Allows users to be able to send keystrokes to
' * dos programs running in a windows95 dos box
' *
' * This class has one property, Destination, which needs to be the handle
' * returned from the shell function of the dos program or any program
' * started with the shell function.
' * It also has one method called, SendKeys, this is the string to be sent
' * to the destination.
' *
' **************************
Option Explicit
Private mvarDestination As Long 'local copy
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SHIFT = &H10
Private Declare Function OemKeyScan Lib "user32" (ByVal wsOemchar As Integer) As Long
Private Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Private Declare Function VkKeyScan Lib "user32" Alias "VkKeyScanA" (ByVal cChar As Byte) As Integer
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Sub SendAKey(ByVal sKeys As String)
Dim vk As Integer
Dim nShiftScan As Integer
Dim nScan As Integer
Dim sOemchar As String
Dim nShiftKey As Integer
' *** Get the virtual key code for this character
vk = VkKeyScan(Asc(sKeys)) And &HFF
' *** See if shift key needs to be pressed
nShiftKey = VkKeyScan(Asc(sKeys)) And 256
sOemchar = " " ' 2 character buffer
' *** Get the OEM character - preinitialize the buffer
CharToOem Left$(sKeys, 1), sOemchar
' *** Get the nScan code for this key
nScan = OemKeyScan(Asc(sOemchar)) And &HFF
' *** Send the key down
If nShiftKey = 256 Then
' *** if shift key needs to be pressed
nShiftScan = MapVirtualKey(VK_SHIFT, 0)
' *** press down the shift key
keybd_event VK_SHIFT, nShiftScan, 0, 0
End If
' *** press key to be sent
keybd_event vk, nScan, 0, 0
' *** Send the key up
If nShiftKey = 256 Then
' *** keyup for shift key
keybd_event VK_SHIFT, nShiftScan, KEYEVENTF_KEYUP, 0
End If
' ***keyup for key sent
keybd_event vk, nScan, KEYEVENTF_KEYUP, 0
End Sub
Public Sub SendKeys(ByVal sKeys As String)
Dim X As Integer
' *** loop thru string to send one key at a time
For X = 1 To Len(sKeys)
' ***activate target application
AppActivate (mvarDestination)
' ***send one key to target
SendAKey Mid$(sKeys, X, 1)
Next
End Sub
Public Property Let Destination(ByVal vData As Long)
'used when assigning a value to the property, on the left si
' de of an assignment.
' ***Syntax: X.Destination = 5
mvarDestination = vData
End Property
Public Property Get Destination() As Long
'used when retrieving value of a property, on the right side
' of an assignment.
' ***Syntax: Debug.Print X.Destination
Destination = mvarDestination
End Property