[bb] Virtual Keys by Eikon [ 1+ years ago ]

Started by BlitzBot, June 29, 2017, 00:28:42

Previous topic - Next topic

BlitzBot

Title : Virtual Keys
Author : Eikon
Posted : 1+ years ago

Description : Virtual Keys is a function which handles the simulation of keypresses. If you have ever needed to force a keystroke, this program is for you. In the included sample, a file is read and then typed out automatically in notepad.

Though the VKey function works in both B+ and B3D, this sample uses a Blitz+ frontend.

A text file, "file.txt", is required. Place in this file whatever text you want the program to type into notepad.

Grab the <a href="http://s93151849.onlinehome.us/eik/vkey.zip" target="_blank">project</a>


Code :
Code (blitzbasic) Select
; Userlib
;.lib "user32.dll"
;keypress%(bVk%, bScan%, dwFlags%, dwExtraInfo%):"keybd_event"
;SetWindowPos%(hWnd%,hAfter%,x%,y%,cx%,cy%,flags%)
;GetActiveWindow%()

; Virtual Keys 1.1 by Eikon
; eikon@carolina.rr.com
; Last revised 12/09/04
Local DeskW = ClientWidth(Desktop()), DeskH = ClientHeight(Desktop())
Win = CreateWindow("Virtual Keys", DeskW / 2 - 150, DeskH / 2 - 60, 300, 120, 0, 1)
hwnd% = GetActiveWindow()
Font = LoadFont("System", 10, 0, 0, 0)
Button = CreateButton("GO!", 6, 55, 282, 32, Win, 1): SetGadgetFont Button, Font
msg$ = "Click on the button to fire up Notepad."
msg$ = msg$ + " Do not close Notepad until it's finished typing."
Label = CreateLabel(msg$, 7, 10, 280, 40, Win, 0)
SetGadgetFont Label, Font

Repeat

Select WaitEvent()

Case $803: End
Case $401
If EventSource() = Button Then ; Begin
SetWindowPos hwnd, -2, 0, 0, 0, 0, 1 + 2     ; Push window under notepad
ExecFile Chr$(34) + "notepad.exe" + Chr$(34) ; Shell notepad
Delay 500                                    ; Give it time to come up
File = ReadFile("file.txt")                  ; Begin reading from file
Repeat
tmp$ = ReadLine(File)
For i = 1 To Len(tmp$)
vkey Mid(tmp$, i, 1), 1          ; Press the key
Delay 5                          ; Small delay to slow typing speed
Next
vkey "ret", 1 ; Return
Until Eof(File)
CloseFile File                               ; Close file

; Begin some trickery
vkey "alt", 0 ; Hold ALT
vkey "f", 1   ; Press F
vkey "alt", 2 ; Release ALT
For i = 1 To 4 ; Move right
vkey "right", 1: Delay 150
Next
For i = 1 To 4 ; Move left
vkey "left", 1: Delay 150
Next
For i = 1 To 6 ; Move down to exit
vkey "down", 1: Delay 150
Next
vkey "ret", 1   ; Press return
vkey "right", 1: Delay 500 ; Go to "no"
vkey "ret", 1   ; Exit notepad without saving

EndIf

End Select
Forever

; //===================================================
; // Virtual Keys VKEY Function
; //
; // Char$  - String containing the character to be pressed
; // State% - 0 KeyDown
; //        - 1 Keypress
; //        - 2 KeyUp
; //
; // Special Char Codes
; //
; // RET   - Return
; // ALT   - ALT Key
; // UP    - Cursor key up
; // DOWN  - Cursor key down
; // LEFT  - Cursor key left
; // RIGHT - Cursor key right
; // F1 through F12 - Function Keys
; // NUM   - Num lock
; // SCR   - Scroll lock
; // LCTRL - Left control
; // RCTRL - Right control
; // LSH   - Left shift
; // RSH   - Right shift
; // LWIN  - Left Windows key
; // RWIN  - Right Windows key
; // DEL   - Delete
; // INS   - Insert
; // PRN   - Print screen
; // HOME  - Home
; // END   - End
; // ESC   - Escape
; // LMB   - Left mouse button
; // RMB   - Right mouse button
; // MMB   - Middle mouse button
; // BACK  - Backspace
; // TAB   - Tab
; // NEXT  - Page down
; // PRIOR - Page up
; // Chr$(34) - Double Quotes
; //===============================================================
Function vkey(char$, state%)
tmp = 0: shift = False

; Shift for uppercase
If Lower$(char$) <> char$ Or char$ = Chr$(34) Then
keypress 161, 0, 0, 0 ; Hold shift
shift = True
EndIf

char$ = Lower$(char$)
Select char$
Case "0": tmp = 48
Case "1": tmp = 49
Case "2": tmp = 50
Case "3": tmp = 51
Case "4": tmp = 52
Case "5": tmp = 53
Case "6": tmp = 54
Case "7": tmp = 55
Case "8": tmp = 56
Case "9": tmp = 57
Case "a": tmp = 65
Case "b": tmp = 66
Case "c": tmp = 67
Case "d": tmp = 68
Case "e": tmp = 69
Case "f": tmp = 70
Case "g": tmp = 71
Case "h": tmp = 72
Case "i": tmp = 73
Case "j": tmp = 74
Case "k": tmp = 75
Case "l": tmp = 76
Case "m": tmp = 77
Case "n": tmp = 78
Case "o": tmp = 79
Case "p": tmp = 80
Case "q": tmp = 81
Case "r": tmp = 82
Case "s": tmp = 83
Case "t": tmp = 84
Case "u": tmp = 85
Case "v": tmp = 86
Case "w": tmp = 87
Case "x": tmp = 88
Case "y": tmp = 89
Case "z": tmp = 90
Case " ": tmp = 32
Case ".": tmp = 190
Case ",": tmp = 188
Case "'": tmp = 222
Case Chr$(34): tmp = 222
Case ";": tmp = 186
Case "/": tmp = 191
Case "": tmp = 220
Case "-": tmp = 189
Case "ret": tmp = 13
Case "alt": tmp = 18
Case "down": tmp = 40
Case "right": tmp = 39
Case "up": tmp = 38
Case "left": tmp = 37
Case "f1": tmp = 112
Case "f2": tmp = 113
Case "f3": tmp = 114
Case "f4": tmp = 115
Case "f5": tmp = 116
Case "f6": tmp = 117
Case "f7": tmp = 118
Case "f8": tmp = 119
Case "f9": tmp = 120
Case "f10": tmp = 121
Case "f11": tmp = 122
Case "f12": tmp = 123
Case "num": tmp = 144
Case "scr": tmp = 145
Case "lctrl": tmp = 162
Case "rctrl": tmp = 163
Case "lwin": tmp = 91
Case "rwin": tmp = 92
Case "del": tmp = 46
Case "ins": tmp = 45
Case "prn": tmp = 44
Case "home": tmp = 36
Case "end": tmp = 35
Case "esc": tmp = 27
Case "lmb": tmp = 1
Case "rmb": tmp = 2
Case "mmb": tmp = 4
Case "back": tmp = 8
Case "tab": tmp = 9
Case "next": tmp = 34
Case "prior": tmp = 33

End Select

If tmp <> 0 Then
If state = 0 Then keypress tmp, 0, 0, 0 ; Down
If state = 1 Then keypress tmp, 0, 0, 0: keypress tmp, 0, 2, 0 ; Press
If state = 2 Then keypress tmp, 0, 2, 0 ; Up
EndIf
If shift = True Then keypress 161, 0, 2, 0 ; Release shift
End Function


Comments :


Conan(Posted 1+ years ago)

 `You gonna make the b3d anytime soon?


Eikon(Posted 1+ years ago)

 The function already works in B3D. Just rip out the GUI code and it will compile fine.