Visual Basic - Problema con el sendkey en un ordenador

Life is soft - evento anual de software empresarial
 
Vista:

Problema con el sendkey en un ordenador

Publicado por Moe (2 intervenciones) el 19/03/2007 19:08:43
En un ordenador nuevo no me funciona correctamente la funcion sendkey. En otro ordenador diferente si que lo hace. ¿No se a qué puede ser debido?

He intentado sin exito probar a hacerlo con un modulo de clase que me baje por internet (csendkeys.cls se llama) pero con ello no puedo simular la tecla ALT, que es exactamente la que necesito, porque no sé a que Vbkey de visual corresponde (VbkeyMenu me utiliza Alt Gr)

Estoy desesperado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con el sendkey en un ordenador

Publicado por Benjo (679 intervenciones) el 19/03/2007 20:16:12
Tecla Código
Mayús +
Ctril (Control) ^
Alt %

En SendKeys la tecla Alt es %, para llamar

Este es un ejemplo del MSDN en donde se utiliza % para enviar a una apicaicón externa una secuencia de teclas Alt F4 para cerrar la aplicación.

Dim ReturnValue, I
ReturnValue = Shell("calc.exe", 1) ' Ejecuta la Calculadora.
AppActivate ReturnValue ' Activa la Calculadora.
For I = 1 To 100 ' Establece un bucle contador.
SendKeys I & "{+}", True ' Envía pulsaciones a la Calculadora
Next I ' para sumar cada valor de I.
SendKeys "=", True ' Obtiene el total general.
SendKeys "%{F4}", True ' Envía ALT+F4 para cerrar la Calculadora.

En realidad la Tecla Alt es una mascara y no está representada por una constante de Visual Basic. POdés en todo caso, utilizar un mapa virtual de teclado, pero eso es demasiado complejo para implementar, tan sólo para simular la tecla Alt.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con el sendkey en un ordenador

Publicado por Moe (2 intervenciones) el 20/03/2007 10:21:15
Muchas gracias Benjo, eres un crack. EL problema que tengo es que el comando "SendKeys "%{F4}", True" que tu bien me recomiendas funciona en un ordenador pero no en otro, que es nuevo, no sé si tendra algo que ver. Por eso estoy buscando otra forma de hacerlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con el sendkey en un ordenador

Publicado por Benjo (679 intervenciones) el 20/03/2007 23:29:36
En Windows XP hay una función del registro que activa automáticamente cualquier aplicación que este bajo el mouse. Esto ocasiona, que aunque tu aplicación ponga en foco una ventana para enviarle una secuencia de teclas, pierda el foco automáticamente porque el Mouse esta fuera de su rango.

Podes probar con la API keybd_event

Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Donde · bVk
Especifica una tecla virtual. El codigo evalua un valor de 1 a 254.

Ejemplo

Const VK_H = 72
Const VK_E = 69
Const VK_L = 76
Const VK_O = 79
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Sub Form_KeyPress(KeyAscii As Integer)
'Imprime la tecla en el Form
Me.Print Chr$(KeyAscii);
End Sub

Private Sub Form_Paint()
'limpia el form
Me.Cls
keybd_event VK_H, 0, 0, 0 ' Presiona la H
keybd_event VK_H, 0, KEYEVENTF_KEYUP, 0 ' libera la H
keybd_event VK_E, 0, 0, 0 ' Presiona la E
keybd_event VK_E, 0, KEYEVENTF_KEYUP, 0 ' libera la E
keybd_event VK_L, 0, 0, 0 ' Presiona la L
keybd_event VK_L, 0, KEYEVENTF_KEYUP, 0 ' libera la L
keybd_event VK_L, 0, 0, 0 ' Presiona la L
keybd_event VK_L, 0, KEYEVENTF_KEYUP, 0 ' libera la L
keybd_event VK_O, 0, 0, 0 ' Presiona la O
keybd_event VK_O, 0, KEYEVENTF_KEYUP, 0 ' libera la O
End Sub

'Con el visor de APIS, podrás encontrar las demás teclas que necesitas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar