vb Code:
Namespace WinApi
Module WinApi
Public Function TypeString(ByVal text As String) As Boolean
For Each c In text
If Not TypeKeySeq(CharToKeys(Asc(c))) Then Return False
Next
Return True
End Function
Public Function TypeKeySeq(ByVal ParamArray keys() As Integer) As Boolean
For Each k In keys
If Not SendSingleInput(InputKey(Short.Parse(k))) Then Return False
Next
Return True
End Function
Private Function InputKey(ByVal signaled_wVk As Short) As INPUT
Dim i As INPUT
i.type = INPUT_KEYBOARD
i.u.ki.wVk = IIf(signaled_wVk < 0, -signaled_wVk, signaled_wVk)
i.u.ki.dwFlags = IIf(signaled_wVk < 0, KEYEVENTF_KEYUP, KEYEVENTF_KEYDOWN)
Return i
End Function
Private Function SendSingleInput(ByVal single_input As INPUT) As Boolean
Return CBool(SendInput(1, single_input, Marshal.SizeOf(single_input)))
Application.DoEvents()
End Function
Private Function CharToKeys(ByVal char_code As Integer) As Integer()
Select Case char_code
Case 9, 13, 27, 32, 48 To 57 : Return {char_code, -char_code}
'
Case 33 : Return {16, 49, -49, -16}
Case 34 : Return {16, 192, -192, -16}
Case 35 : Return {16, 51, -51, -16}
Case 36 : Return {16, 52, -52, -16}
Case 37 : Return {16, 53, -53, -16}
Case 38 : Return {16, 55, -55, -16}
Case 39 : Return {192, -192}
Case 40 : Return {16, 57, -57, -16}
Case 41 : Return {16, 48, -48, -16}
Case 42 : Return {16, 56, -56, -16}
Case 43 : Return {16, 187, -187, -16}
'
Case 44 To 46 : Return {char_code + 144, -(char_code + 144)}
'
Case 47 : Return {193, -193}
Case 58 : Return {16, 191, -191, -16}
Case 59 : Return {191, -191}
Case 60 : Return {16, 188, -188, -16}
Case 61 : Return {187, -187}
Case 62 : Return {16, 190, -190, -16}
Case 63 : Return {16, 193, -193, -16}
Case 64 : Return {16, 50, -50, -16}
'
Case 65 To 90 : Return {16, char_code, -char_code, -16}
'
Case 91 : Return {221, -221}
Case 92 : Return {226, -226}
Case 93 : Return {220, -220}
Case 94 : Return {16, 222, -222, -16, 32, -32}
Case 95 : Return {16, 189, -189, -16}
Case 96 : Return {16, 219, -219, -16, 32, -32}
'
Case 97 To 122 : Return {char_code - 32, -(char_code - 32)}
'
Case 123 : Return {16, 221, -221, -16}
Case 124 : Return {16, 226, -226, -16}
Case 125 : Return {16, 220, -220, -16}
Case 126 : Return {222, -222, 32, -32}
'
Case 162 : Return {17, 18, 53, -53, -18, -17}
Case 163 : Return {17, 18, 52, -52, -18, -17}
'
Case 167 : Return {17, 18, 187, -187, -18, -17}
'
Case 170 : Return {17, 18, 221, -221, -18, -17}
'
Case 172 : Return {17, 18, 54, -54, -18, -17}
'
Case 176 : Return {17, 18, 193, -193, -18, -17}
'
Case 178 : Return {17, 18, 50, -50, -18, -17}
Case 179 : Return {17, 18, 51, -51, -18, -17}
'
Case 185 : Return {17, 18, 49, -49, -18, -17}
Case 186 : Return {17, 18, 220, -220, -18, -17}
'
Case 192 : Return {16, 219, -219, 65, -65, -16}
Case 193 : Return {219, -219, 16, 65, -65, -16}
Case 194 : Return {16, 222, -222, 65, -65, -16}
Case 195 : Return {222, -222, 16, 65, -65, -16}
Case 196 : Return {16, 54, -54, 65, -65, -16}
'
Case 199 : Return {16, 186, -186, -16}
Case 200 : Return {16, 219, -219, 69, -69, -16}
Case 201 : Return {219, -219, 16, 69, -69, -16}
Case 202 : Return {16, 222, -222, 69, -69, -16}
Case 203 : Return {16, 54, -54, 69, -69, -16}
Case 204 : Return {16, 219, -219, 73, -73, -16}
Case 205 : Return {219, -219, 16, 73, -73, -16}
Case 206 : Return {16, 222, -222, 73, -73, -16}
Case 207 : Return {16, 54, -54, 73, -73, -16}
'
Case 209 : Return {222, -222, 16, 78, -78, -16}
Case 210 : Return {16, 219, -219, 79, -79, -16}
Case 211 : Return {219, -219, 16, 79, -79, -16}
Case 212 : Return {16, 222, -222, 79, -79, -16}
Case 213 : Return {222, -222, 16, 79, -79, -16}
Case 214 : Return {16, 54, -54, 79, -79, -16}
'
Case 217 : Return {16, 219, -219, 85, -85, -16}
Case 218 : Return {219, -219, 16, 85, -85, -16}
Case 219 : Return {16, 222, -222, 85, -85, -16}
Case 220 : Return {16, 54, -54, 85, -85, -16}
'
Case 224 : Return {16, 219, -219, -16, 65, -65}
Case 225 : Return {219, -219, 16, -16, 65, -65}
Case 226 : Return {16, 222, -222, -16, 65, -65}
Case 227 : Return {222, -222, 16, -16, 65, -65}
Case 228 : Return {16, 54, -54, -16, 65, -65}
'
Case 231 : Return {186, -186}
Case 232 : Return {16, 219, -219, -16, 69, -69}
Case 233 : Return {219, -219, 69, -69}
Case 234 : Return {16, 222, -222, -16, 69, -69}
Case 235 : Return {16, 54, -54, -16, 69, -69}
Case 236 : Return {16, 219, -219, -16, 73, -73}
Case 237 : Return {219, -219, 73, -73}
Case 238 : Return {16, 222, -222, -16, 73, -73}
Case 239 : Return {16, 54, -54, -16, 73, -73}
'
Case 241 : Return {222, -222, 78, -78}
Case 242 : Return {16, 219, -219, -16, 79, -79}
Case 243 : Return {219, -219, 79, -79}
Case 244 : Return {16, 222, -222, -16, 79, -79}
Case 245 : Return {222, -222, 79, -79}
Case 246 : Return {16, 54, -54, -16, 79, -79}
'
Case 249 : Return {16, 219, -219, -16, 85, -85}
Case 250 : Return {219, -219, 85, -85}
Case 251 : Return {16, 222, -222, -16, 85, -85}
Case 252 : Return {16, 54, -54, -16, 85, -85}
'
Case Else : Return New Integer() {}
End Select
End Function
<DllImport("user32.dll", SetLastError:=True)> _
Private Function SendInput(ByVal cInputs As Integer, ByRef pInputs As INPUT, ByVal cbSize As Integer) As Integer
End Function
End Module
End Namespace