[SOLUCIONADO] Utilizar keybd_event para simular "@" "\" "/" y otros...

Iniciado por yovaninu, 19 Noviembre 2013, 05:49 AM

0 Miembros y 1 Visitante están viendo este tema.

yovaninu

hola, he estado usando la api keybd_event para simular presionar teclas normales y otras pero para realizar una simulacion de combinacion de teclas como por ej. Alt+64 no me funciona, lo he estado haciendo asi:


Public Const Alt_iz = &HA4


   
   Call keybd_event(Alt_iz, 0, 0, 0) 'presionamos Alt Izquierdo
   Pulsar_Tecla (vbKeyNumpad6) 'presionamos 6 numerico
   Pulsar_Tecla (vbKeyNumpad4) 'presionamos 4 numerico
   Call keybd_event(Alt_iz, 0, KEYEVENTF_KEYUP, 0) 'soltamos la tecla Alt Izquierdo


La funcion Pulsar_Tecla es simple:


Sub Pulsar_Tecla(Tecla As Long)
   Call keybd_event(Tecla, 0, 0, 0)
   Call keybd_event(Tecla, 0, KEYEVENTF_KEYUP, 0)
End Sub


Y no funciona, alguien podria echarme una mano, y con otros simbolos? como por ej. el "/" o el "\".

Desde ya gracias por su ayuda.



Danyfirex


yovaninu

SendKeys no me sirve, aún así desearia hacerlo con la API, he estado buscando pero no hay mucho sobre lo que pido, Gracias de todas formas.

Danyfirex

Pues como dices no hay mucho sobre lo que pides solo MSDN  :rolleyes:  :laugh:


Bueno me puse a leer un poco en MSDN y te arme un ejemplo:


Código (vb) [Seleccionar]
'Constantes para las teclas y otros
 
Const KEYEVENTF_KEYUP = &H2
Const VK_LMENU = &HA4   'Alt Izquierdo
Const VK_RMENU = &HA5   'Alt Derecho
Const VK_NUMPAD6 = &H66 '6
Const VK_NUMPAD4 = &H64 '4
Const VK_LSHIFT = &HA0  'Shift Izquierdo
Const VK_NUM7 = &H37    'Numero 7  Barra de división "/"
Const VK_OEM_5 = &HDC   'Barra inversa \


Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyW" (ByVal wCode As Long, ByVal wMapType As Long) As Long
 
 
 

 
Private Sub Command1_Click()
Text1.SetFocus

'Enviar @ Arroba
Call keybd_event(VK_LMENU, MapVirtualKey(VK_LMENU, 0), 0, 0)
Call keybd_event(VK_NUMPAD6, MapVirtualKey(VK_NUMPAD6, 0), 0, 0)
Call keybd_event(VK_NUMPAD4, MapVirtualKey(VK_NUMPAD4, 0), 0, 0)
Call keybd_event(VK_NUMPAD6, MapVirtualKey(VK_NUMPAD6, 0), KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_NUMPAD4, MapVirtualKey(VK_NUMPAD4, 0), KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_LMENU, MapVirtualKey(VK_LMENU, 0), KEYEVENTF_KEYUP, 0)


'Enviar / Barra de division
Call keybd_event(VK_LSHIFT, MapVirtualKey(VK_LSHIFT, 0), 0, 0)
Call keybd_event(VK_NUM7, MapVirtualKey(VK_NUM7, 0), 0, 0)
Call keybd_event(VK_NUM7, MapVirtualKey(VK_NUM7, 0), KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_LSHIFT, MapVirtualKey(VK_LSHIFT, 0), KEYEVENTF_KEYUP, 0)


'Enviar \ Barra inversa
Call keybd_event(VK_RMENU, MapVirtualKey(VK_RMENU, 0), 0, 0)
Call keybd_event(VK_OEM_5, MapVirtualKey(VK_OEM_5, 0), 0, 0)
Call keybd_event(VK_OEM_5, MapVirtualKey(VK_OEM_5, 0), KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_RMENU, MapVirtualKey(VK_RMENU, 0), KEYEVENTF_KEYUP, 0)


End Sub



Espero te sriva de algo. te dejo solo enviando "@"  "\"  "/" es cuestion de ver las VirtualKey correspondiente para armas los otros. saludos

yovaninu

Excelente Dany, tenia la sospecha de que debia indagar mas a cerca de MapVirtualKey pero la falta de tiempo me desanimó.

Me ha servido de mucho, una gran solución. Saludos y exitos.