'' -------------------------------------------------------- '' Form Code By Dusp2000 '' The Internet Doctor '' '' Keyboard Simulation Using API's Private Sub Command1_Click() PressKeyVK keyControl, True ' HOLD DOWN PressKeyVK keyAlt, True ' HOLD DOWN PressKeyVK keyF1 PressKeyVK keyControl, , True ' RELEASE PressKeyVK keyAlt, , True ' RELEASE End Sub Private Sub Command2_Click() PressKeyVK keyControl, True ' HOLD DOWN PressKeyVK keyEscape PressKeyVK keyControl, , True ' RELEASE End Sub Private Sub Command3_Click() PressKeyVK keyCapsLock End Sub Private Sub Command4_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 32 Then Command4_MouseDown 0, 0, 0, 0 End Sub Private Sub Command4_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = 32 Then Command4_MouseUp 0, 0, 0, 0 End Sub Private Sub Command4_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) PressKeyVK keyAlt, True ' This activates the TabWindow PressKeyVK keyTab End Sub Private Sub Command4_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) PressKeyVK keyTab ' This selectes the next App in the list PressKeyVK keyAlt, , True End Sub Private Sub Command5_Click() PressKeyVK keyScrollLock End Sub '' --------------------------------------------------------- '' Module Code By Dusp2000 '' The Internet Doctor '' '' Keyboard Simulation Using API's Declare Function MapVirtualKey Lib "user32" Alias _ "MapVirtualKeyA" (ByVal wCode As Long, _ ByVal wMapType As Long) As Long Declare Function VkKeyScan Lib "user32" Alias "VkKeyScanA" (ByVal _ cChar As Byte) As Integer Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _ bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As _ Long) As Integer Private Const KEYEVENTF_EXTENDEDKEY = &H1 Private Const KEYEVENTF_KEYUP = &H2 Public Enum enumKeys keyBackspace = &H8 keyTab = &H9 keyReturn = &HD keyShift = &H10 keyControl = &H11 keyAlt = &H12 keyPause = &H13 keyEscape = &H1B keySpace = &H20 keyEnd = &H23 keyHome = &H24 keyLeft = &H25 KeyUp = &H26 keyRight = &H27 KeyDown = &H28 keyInsert = &H2D keyDelete = &H2E keyF1 = &H70 keyF2 = &H71 keyF3 = &H72 keyF4 = &H73 keyF5 = &H74 keyF6 = &H75 keyF7 = &H76 keyF8 = &H77 keyF9 = &H78 keyF10 = &H79 keyF11 = &H7A keyF12 = &H7B keyNumLock = &H90 keyScrollLock = &H91 keyCapsLock = &H14 End Enum 'Presses the single key represented by sKey Public Sub PressKey(sKey As String, Optional bHold As Boolean, _ Optional bRelease As Boolean) Dim nVK As Long nVK = VkKeyScan(Asc(sKey)) If nVK = 0 Then Exit Sub Dim nScan As Long Dim nExtended As Long Dim bShift As Boolean Dim bCtrl As Boolean Dim bAlt As Boolean nScan = MapVirtualKey(nVK, 2) If nScan = 0 Then nExtended = KEYEVENTF_EXTENDEDKEY Else nExtended = 0 nScan = MapVirtualKey(nVK, 0) bShift = (nVK And &H100) bCtrl = (nVK And &H200) bAlt = (nVK And &H400) nVK = (nVK And &HFF) If Not bRelease Then If bShift Then keybd_event enumKeys.keyShift, 0, 0, 0 If bCtrl Then keybd_event enumKeys.keyControl, 0, 0, 0 If bAlt Then keybd_event enumKeys.keyAlt, 0, 0, 0 keybd_event nVK, nScan, nExtended, 0 End If If Not bHold Then keybd_event nVK, nScan, KEYEVENTF_KEYUP Or nExtended, 0 If bShift Then keybd_event enumKeys.keyShift, 0, KEYEVENTF_KEYUP, 0 If bCtrl Then keybd_event enumKeys.keyControl, 0, KEYEVENTF_KEYUP, 0 If bAlt Then keybd_event enumKeys.keyAlt, 0, KEYEVENTF_KEYUP, 0 End If End Sub 'Loop through a string and calls PressKey for each character (Does not ' parse strings like SendKeys) Public Sub PressString(ByVal sString As String, Optional bDoEvents As Boolean = True) Do While sString <> "" PressKey Mid(sString, 1, 1) Sleep 20 If bDoEvents Then DoEvents sString = Mid(sString, 2) Loop End Sub 'Presses a specific key (this is used for keys that don't have a ' ascii equilivant) Public Sub PressKeyVK(keyPress As enumKeys, Optional bHold As Boolean, _ Optional bRelease As Boolean, Optional bCompatible As Boolean) Dim nScan As Long Dim nExtended As Long nScan = MapVirtualKey(keyPress, 2) If nScan = 0 Then nExtended = KEYEVENTF_EXTENDEDKEY Else nExtended = 0 nScan = MapVirtualKey(keyPress, 0) If bCompatible Then nExtended = 0 If Not bRelease Then keybd_event keyPress, nScan, nExtended, 0 If Not bHold Then keybd_event keyPress, nScan, KEYEVENTF_KEYUP Or nExtended, 0 End Sub 'Returns (in the boolean variables) the status of the various Lock keys Public Sub GetLockStatus(bCapsLock As Boolean, bNumLock As Boolean, _ bScrollLock As Boolean) bCapsLock = GetKeyState(enumKeys.keyCapsLock) bNumLock = GetKeyState(enumKeys.keyNumLock) bScrollLock = GetKeyState(enumKeys.keyScrollLock) End Sub