sendkeys con caracteres 'especiales'

20/04/2007 - 22:33 por Ivan | Informe spam
hola a todos,

haciendo pruebas, me estoy volviendo majara en mis intentos de
'teclear' con SebdKeys los caracteres obtenidos mediante Alt
+TecladoNumerico. He probado muchas formas ( si quereis expongo
algunas), e incluso he probado a incluir la expresion 'NUMPAD' de
diversas maneras, a ver si colaba. Pero no me ha tocado la loteria y
sigo igual que al principio.

un detalle: la secuencia de teclazos se la paso desde una variable,
pej.->

teclas = "%(" & .range("a1") & ")"

sendkeys teclas

o similar

bueno, si podeis echarme una mano, como siempre os lo agradezco

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
20/04/2007 - 23:08 | Informe spam
hola, Ivan 1

... me estoy volviendo majara en mis intentos de 'teclear'... caracteres obtenidos mediante Alt +TecladoNumerico.
... incluso he probado a incluir la expresion 'NUMPAD' de diversas maneras, a ver si colaba.
... no me ha tocado la loteria y sigo igual que al principio.
un detalle: la secuencia de teclazos se la paso desde una variable, pej.->
teclas = "%(" & .range("a1") & ")"
sendkeys teclas
o similar [...]



1) 'hablando' del metodo 'SendKeys' convendria tener presentes dos o tres 'detalles' [p.e.] una instruccion SendKeys "teclas"
a) NO es 'ejecutada' en la linea/momento/orden/... 'preciso' en que aparece entre las lineas del codigo [por que? preguntaras]...
b) excel/vba -> la mantienen en 'estado latente' [como en hibernacion]
c) es 'iberada/ejecutada/...' SOLAMENTE... al presentarse circunstancias como...
1) cuando se termina el procedimiento que 'manda' la secuencia de teclas
2) cuando se interrumpe el proceso para mostrar algun dialogo que 'demande' intaraccion o respuesta por parte del usuario
d) NO es un 'metodo' confiable al 100% [a menos que encuentres la forma de 'mantenerlo bajo tu control en el codigo] -?-

2) luego del anterior 'preambulo'... podrias comentar [con el debido 'detalle']
-> los antecedentes/entorno/preparacion/... y los resultados 'esperados' para usar el SendKeys ???

saludos,
hector.
Respuesta Responder a este mensaje
#2 Ivan
21/04/2007 - 03:15 | Informe spam
hola Hector, gracias nuevamente por tu atencion

paso a comentarte, empezando por el final de tu respuesta:

2) luego del anterior 'preambulo'... podrias comentar [con el debido
'detalle']
-> los antecedentes/entorno/preparacion/... y los resultados
'esperados' para usar el SendKeys ???



pues, para serte sincero, el principal 'culpable de esta situacion en la que
me hallo', es un tal Hector Miguel (y no precisamente 'el cuervo') y su
articulo 'proteger.xls'. Empece por conocer alli eso de las teclas
especiales, y luego, tras leer otras cuantas 'cosillas' suyas sobre
SendKeys, pues, la curiosidad ya se sabe .

bueno (aunque no he dicho ninguna mentira), ahora en serio.

Aunque en el fondo son meras practicas debidas a dicha curiosidad, la
cuestion es que probando diversas conbinaciones de tus propuestas de dicho
articulo con algunas de mis 'idas de olla', me lie a meter caracteres
especiales en una clave sin apuntar sus respectivas teclas numericas, es
decir, al tun tun, y claro, al querer desproteger pues me volvi majara. Creo
recordar que dabas una direccion donde encontrar una lista para los
caracteres especiales (y de hecho he encontrado otra/o la misma con
facilidad), pero mi vicio pudo mas y se me metio entre ceja y ceja conseguir
listar dichos caracteres, o al menos averiguar si es posible. Mas que nada
por ir añadiendo cosillas a la 'saca'.

en cuanto al resto:

c) es 'iberada/ejecutada/...' SOLAMENTE... al presentarse circunstancias
como...
1) cuando se termina el procedimiento que 'manda' la secuencia de
teclas



¿tiene algo que hacer aqui el segundo argumento de SendKeys? si no es asi,
no acabo de entenderlo (la explicacion del argumento)

2) cuando se interrumpe el proceso para mostrar algun dialogo que
'demande' intaraccion o respuesta por parte del usuario



supongo que esto permitiria mandar la secuencia (pej. contraseña) a cuadro
de dialogo. Pero, de ser asi, en que 'posicion' habria que escribir el
codigo ¿antes o una vez abierto el cuadro de dialogo?

d) NO es un 'metodo' confiable al 100% [a menos que encuentres la forma
de 'mantenerlo bajo tu control en el codigo] -?-



Realmente no creo que llegue a utilizarlo con otro fin, mucho menos tras
leer tus consejos/advertencias, pero bueno, la duda sigue ahi, y me gustaria
resolverla.

finalmente, aunque como te comento es sobre todo por ir aprendiendo algo
mas, te pongo algunas de mis pruebas, en las cuales suele devolverme en una
columna esto "", o sea, solo las comillas

un saludo y hasta pronto
Ivan

'NOTA: lo mismo hay mas de una burrada en los códigos
'prueba 1 con una de con números directos tipo (no las considera del
tecla. numérico)
'
Sub caracteresConAlt()
Dim x As Byte, teclas, num1, num2, num3, num
With Hoja1
.Activate
Application.SendKeys "%{F11}"
.Cells(1, 5).Select
For x = 100 To 200
' teclas = """%({" & num & "})"""
On Error Resume Next
Application.SendKeys """%(" & num & ")""" '{ENTER}", True
Application.SendKeys "{ENTER}"
' Debug.Print teclas
On Error GoTo 0
Next
End With
End Sub
'--intento con las constantes del teclado numérico
'
Sub caracteresConAlt2()
Dim x As Byte, teclas, num1, num2, num3, num
With Hoja1
.Activate
Application.SendKeys "%{F11}"
.Cells(1, 5).Select
For x = 10 To 99
teclas = """%({vbKeyNumpad1}{vbKeyNumpad" & CInt(Left(x, 1)) & _
"}{vbKeyNumpad" & CInt(Right(x, 1)) & "})"""
On Error Resume Next
Application.SendKeys teclas ', True
Application.SendKeys "{ENTER}"
' Debug.Print teclas
On Error GoTo 0
Next
End With
End Sub
'probando a usar el que (creo) es el codigo numérico de los
nros.
'
Sub pruebaTeclas_1()
Dim num1 As Integer, num2 As Integer, num3 As Integer, num As String
With Hoja1
.Activate
Application.SendKeys "%{F11}"
.Cells(1, 5).Select
For num = 100 To 200
num1 = CInt(Left(num, 1)) + 96
num2 = CInt(Mid(num, 2, 1)) + 96
num3 = CInt(Right(num, 1)) + 96
num = "%((" & num1 & ")(" & num2 & ")(" & num3 & ")){ENTER}"
On Error Resume Next
Application.SendKeys """" & num & """"
On Error GoTo 0
Next
End With
End Sub
'-- casi igual pero usando una 'especie' de función , por si
acaso
'
Sub pruebaTeclas_2()
Dim num1 As Integer, num2 As Integer, num3 As Integer, num As String
With Hoja1
.Activate
Application.SendKeys "%{F11}"
.Cells(1, 5).Select
For num = 100 To 200
num1 = TeclaNumpad(CInt(Left(num, 1)))
num2 = TeclaNumpad(CInt(Mid(num, 2, 1)))
num3 = TeclaNumpad(CInt(Right(num, 1)))
num = """%((" & num1 & ")(" & num2 & ")(" & num3 & "))""" '{ENTER}"""
On Error Resume Next
Application.SendKeys num
Application.SendKeys "{ENTER}"
On Error GoTo 0
Next
End With
End Sub
'--'especie' de funcion para obtener el codigo del teclado
numerico
'
Function TeclaNumpad(ByVal tecla As Variant) As Integer
Select Case CInt(tecla)
Case 0: TeclaNumpad = vbKeyNumpad0
Case 1: TeclaNumpad = vbKeyNumpad1
Case 2: TeclaNumpad = vbKeyNumpad2
Case 3: TeclaNumpad = vbKeyNumpad3
Case 4: TeclaNumpad = vbKeyNumpad4
Case 5: TeclaNumpad = vbKeyNumpad5
Case 6: TeclaNumpad = vbKeyNumpad6
Case 7: TeclaNumpad = vbKeyNumpad7
Case 8: TeclaNumpad = vbKeyNumpad8
Case 9: TeclaNumpad = vbKeyNumpad9
End Select
End Function
Respuesta Responder a este mensaje
#3 Héctor Miguel
21/04/2007 - 06:35 | Informe spam
hola, Ivan !

__ 1 __
... el principal 'culpable de esta situacion en la que me hallo', es un... articulo 'proteger.xls'
... eso de las teclas especiales, y luego, tras leer otras cuantas 'cosillas'... sobre SendKeys, pues, la curiosidad ya se sabe ...
... en el fondo son meras practicas debidas a dicha curiosidad, la cuestion es que probando diversas conbinaciones
... me lie a meter caracteres especiales en una clave sin apuntar sus respectivas teclas numericas
... se me metio entre ceja y ceja conseguir listar dichos caracteres, o al menos averiguar si es posible...


__ 2 __
tiene algo que hacer aqui el segundo argumento de SendKeys? si no es asi, no acabo de entenderlo (la explicacion del argumento)


__ 3 __
2) cuando se interrumpe el proceso para mostrar algun dialogo que 'demande' intaraccion o respuesta por parte del usuario



supongo que esto permitiria mandar la secuencia (pej. contrase#a) a cuadro de dialogo
... de ser asi, en que 'posicion' habria que escribir el codigo antes o una vez abierto el cuadro de dialogo?


__ 4 __
finalmente, aunque como te comento es sobre todo por ir aprendiendo algo mas, te pongo algunas de mis pruebas
en las cuales suele devolverme en una columna esto "", o sea, solo las comillas [...]



1) vamos 'entendiendo/distinguiendo/...' que le significa 'Keys' al metodo :D
a) SendKeys 'envia' a la aplicacion [o al entorno donde se encuentre el enfoque]...
la/s tecla/s [o secuencia de ellas] 'talco...mo' si las estuviera 'pulsando' el usuario [obviamente en el teclado de la pc]
b) usando como ejemplo a la arroba '@':
1) si NO 'la ves' en la distribucion de tu teclado... la puedes obtener combinando: -> {Alt}+64 [64 con el teclado numerico]
2) lo anterior no significa que para 'SendKeys' DEBAS indicarle [p.e.] SendKeys "%" & 64_con_el_teclado_numerico
-> simplemente, le mandas el caracter correspondiente a: {Alt}+64_con_el_teclado numerico : -> SendKeys "@"
c) [creo que] se entenderia 'mejor' el metodo si se llamara -> SendCharacters :))
o sea... una vez obtenido/conocido/... 'el caracter' que necesitas... [simplemente] lo mandas como SendKeys "xyz"
nota: tambien se comenta 'en el articulo' que el caracter que veas 'dependera' del tipo de letra/fuente que tengas en uso [p.e.]
{Alt}+174 devuelve un 'mini-doble-menor_que' -> « PERO... 'que signo/caracter veas' ?... -> [prueba cambiando la fuente] :))

2) el segundo argumento de SendKeys le indica a la aplicacion [excel] si debe 'esperar' a que otra aplicacion termine sus procesos
de acuerdo con la ayuda en linea...
Wait Variant opcional. True para que Microsoft Excel espere a que las teclas se procesen antes de devolver el control a la macro.
False (o se omite) para seguir ejecutando la macro sin esperar a que las teclas se procesen

3) para abrir libros 'protegidos' [obviamente conociendo la/s claves de apertura/escritura], dice la ayuda en linea:
Este metodo introduce la pulsaciones en un bufer de teclas.
En algunos casos necesitara llamar a este metodo antes de llamar al que usara las pulsaciones.
... para enviar una contrase#a a un cuadro de dialogo, debe llamar al metodo SendKeys antes de mostrar el cuadro de dialogo

-> un ejemplo pudiera ser +/- como el siguiente [ya sabes que puedes representar enter como ~ o {enter} -delimitado por llaves-]:

Sub Abrir_Libro_con_clave()
' primero mandamos la clave y el enter ... '
SendKeys "esta es la clave~"
' luego abrimos el libro protgido ... '
Workbooks.Open "libro con clave.xls"
End Sub

-> nota: si e libro contiene proteccion para apertura Y tambien para escritura [sean la misma o diferentes]...
deberas indicar ambas claves y 'terminar' cada una con el enter -> ~ o {enter} p.e.
SendKeys "clave de apertura~clave de escritura~"

4) [creo que] si ya le has captado la idea al como funciona 'eso' del bufer...
este cuarto punto no necesitara de explicaciones adicionales :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Ivan
21/04/2007 - 18:40 | Informe spam
hola Hector, muchas gracias por tu ayuda y tus explicaciones.

tomo buena nota de todo y lo añado a mi lista de tareas para ir
puliendolo poco a poco

gracias de nuevo y un saludo y hasta pronto
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida