RE:Como crear un teclado virtual...
Lo que pides no es algo relativamente sencillo porque varía según las aplicaciones a las que quieras enviar las pulsaciones. Deberías utilizar BringWindowToTop para pasar la ventana que quieres hacia adelante y luego, keybd_event, por ejemplo para el Notepad:
lngHwnd = FindWindow("Notepad", "Untitled - Notepad")
BringWindowToTop lngHwnd
strProv = "Esta es una prueba"
For i = 1 To Len(strProv)
keybd_event Asc(Mid(strProv, i, 1)), 0, 0, 0
keybd_event Asc(Mid(strProv, i, 1)), 0, KEYEVENTF_KEYUP, 0
Next i
keybd_event 13, 0, 0, 0
keybd_event 13, 0, KEYEVENTF_KEYUP, 0
Las funciones son:
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function BringWindowToTop Lib "user32" Alias "BringWindowToTop" (ByVal hwnd As Long) As Long
Public Declare Sub keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)