elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  SendKeys("{INSERT}") no esta siendo reconocido por algunas aplicaciones.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: SendKeys("{INSERT}") no esta siendo reconocido por algunas aplicaciones.  (Leído 4,030 veces)
79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
SendKeys("{INSERT}") no esta siendo reconocido por algunas aplicaciones.
« en: 28 Marzo 2019, 12:55 pm »

HOLA!!!

Muy buenos dias gente!

Primero y principal quiero aclarar que estoy por volverme loco.

Hice un programa para automatizar el pase de unos comprobantes a un sistema y este sistema no acepta la sentencia SendKeys("{INSERT}") (Ni con Wait ni con {INS}) pero curiosamente la esa misma sentencia funciona correctamente en cmd.exe pero no en el software que quiero controlar.

Ahora unas pruebas:
Enviare la siguiente cadena a la aplicacion de destino y a CMD asi lo verifican."{INSERT}|{INSERT}|{INSERT}|{INSERT}|{INSERT}|{INSERT}"

Muestra de que funciona con CMD (notese que el cursor cambia, por ende acepta INSERT):


Lo que deberia hacer (esto lo pasa cuando presiono la tecla insert manualmente):


Lo que pasa (notese que el cursor se oculta, raro porque en este caso no envie ningun caracter imprimible):


Mi codigo es muy simple, en definitiva es un timer que va recorriendo el array generado por
Split("{INSERT}|{INSERT}|{INSERT}|{INSERT}|{INSERT}|{INSERT}","|") y envia el sendkeys del item segundo a segundo.

Ya he probado con y sin privilegios de administrador.

Otros datos de color:
El programa MacroMaker envia bien la pulsacion de Insert y con este funciona.
Estoy utilizando Windows 10
Tengo otro programa que arme en VB6 y que en windows 7 envia correctamente los sendkeys con el soft y pantalla que mostre. (aunque ahora en WIN10 no anda mas)


GRACIAS POR LEER!!!


« Última modificación: 28 Marzo 2019, 13:01 pm por 79137913 » En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: SendKeys("{INSERT}") no esta siendo reconocido por algunas aplicaciones.
« Respuesta #1 en: 28 Marzo 2019, 15:39 pm »

si me pasas el software y el código fuente de la macro que envía la pulsación de la tecla a ese software, te lo puedo mirar en Windows 10 y quizás te sea de ayuda-

saludos


En línea



79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: SendKeys("{INSERT}") no esta siendo reconocido por algunas aplicaciones.
« Respuesta #2 en: 28 Marzo 2019, 17:12 pm »

HOLA!!!

Paso el Source

http://www.mediafire.com/file/9mq850nb8fmsfdy/EXPORTARFACTURAS.rar/file

Gracias @Eleкtro

Notas:
Dentro del rar tenes el archivo para importar comprobantes.
De todas formas el soft al iniciar luego de 3 segundos enviara unas pulsaciones insert (que use para prueba)

Cosas para modificar si queres:
intervalo de tmrExecute (esta en 1000ms para hacer pruebas, luego lo subire a 50-100)
Linea de inicio de Commands:
Código
  1. Public Commands As String = "{INSERT}|{INSERT}|{INSERT}|{INSERT}|{INSERT}|{INSERT}"
  2. 'se puede pasar a:
  3. Public Commands As String = ""
Ademas podes quitarle el Enabled a tmrCOUNTDOWN a los efectos que no inicie automaticamente.


PD:
Comenta la linea:
Código
  1. TextBox1.Text = Commands
GRACIAS POR LEER!!!
« Última modificación: 28 Marzo 2019, 17:16 pm por 79137913 » En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: SendKeys("{INSERT}") no esta siendo reconocido por algunas aplicaciones.
« Respuesta #3 en: 29 Marzo 2019, 22:00 pm »

Hay algunas cosas que no tengo del todo claro, empezando por la necesidad que tienes de enviar pulsaciones del teclado a los controles de tu propia interfaz de usuario. Por ejemplo para invocar un botón de forma programática simplemente podrías llamar al método Button.PerformClick(), aunque imagino que eso ya lo sabías.

Bueno, he estado revisando el sample que me has enviado y el fallo realmente es muy simple. Sencillamente te estás confundiendo de tecla, sí, la tecla que debes enviar para invocar la acción predeterminada de un botón no es la tecla INSERT, sino la tecla ENTER, ya sea el ENTER normal o el del pad numérico, es decir, "{ENTER}" o "~".
Tu botón recibe correctamente los mensajs de ventana WM_KEYDOWN y WM_KEYUP de la tecla INSERT, pero el botón "no hace nada" por que la tecla INSERT no sirve para invocar la acción predeterminada.

Vamos, que simplemente debes reemplazar "{INSERT}" por "{ENTER}", aunque no se si esto solucionará todos los problemas que tengas realmente, pero podemos ir solucionáandolos uno por uno. De momento ya te he explicado como solucionar este error.



Por último, y como cliente que eres, te explico diferentes formas de enviar pulsaciones del teclado usando mi librería comercial DevCase for .NET Framework:

1. Enviar una pulsación sincrónica del teclado mediante las extensiones para la clase Control:
Código
  1. Imports DevCase.Core.Extensions.Control
  2. Imports DevCase.Core.IO
  3.  
  4. Dim ctrl As Control = ImportarVentas
  5. ctrl.SendKey(Keys.Enter, KeyBehavior.Press)

2. Enviar una pulsación asincrónica del teclado mediante las extensiones para la interface IWin32Window:
Nótese que esta llamada se realizará de forma sincrónica si la utilizas para enviar la pulsación a una ventana/control de tu aplicación actual
Código
  1. Imports DevCase.Core.Extensions.IWin32Window
  2. Imports DevCase.Core.IO
  3.  
  4. Dim window As IWin32Window = ImportarVentas
  5. window.SendKeyAsync(Keys.Enter, KeyBehavior.Press)
  6.  

3. Enviar una pulsación sincrónica del teclado a la ventana activa en el sistema, mediante la clase KeyboardUtil:
Código
  1. Imports DevCase.Core.IO
  2. Imports DevCase.Core.IO.Tools
  3.  
  4. KeyboardUtil.SendKey(Keys.Enter, KeyBehavior.Press)

4. Enviar una pulsación asincrónica del teclado a una ventana externa, mediante la clase KeyboardUtil:
Código
  1. Imports DevCase.Core.IO
  2. Imports DevCase.Core.IO.Tools
  3.  
  4. Dim hWnd As IntPtr = IntPtr.Zero
  5. Dim success As Boolean = KeyboardUtil.SendKeyAsync(hWnd, Keys.Enter, KeyBehavior.Press)


Diferenciación: SendKey internamente usa la infraestructura Raw Input, mientras que SendKeyAsync usa la función PostMessage.


Eso es todo. ¡Un saludo!.
« Última modificación: 30 Marzo 2019, 00:45 am por Eleкtro » En línea



79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: SendKeys("{INSERT}") no esta siendo reconocido por algunas aplicaciones.
« Respuesta #4 en: 1 Abril 2019, 14:24 pm »

HOLA!!!

@Eleкtro

Creo que no haz comprendido, las pulsaciones no se envian a mi propia app, se envian a una aplicacion de contabilidad que tengo aparte, ahora pruebo con keyboard utils a ver que onda y te cuento.

GRACIAS POR LEER!!!
En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines