Código ejecutable tras cierta acción

Iniciado por man3l3t, 2 Febrero 2015, 23:08 PM

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

man3l3t

Hola. Estoy metido en un proyecto en el que necesito un código que realice una acción concreta. He comprado un lector de códigos de barras, el cual no he probado, y según he leído es como un teclado; al leer el código lo saca por teclado como si lo estuviese escribiendo yo mismo.
Necesito un ejecutable que se inicie siempre con windows y que si el lector lee, por ejemplo, un número "123456XXX" (las XXX son variables y el resto deberá seguir esa estructura) lo almacene en un .txt (por ejemplo) y windows simule una pulsación física de un botón del teclado (por ejemplo la tecla "s"). Si el número tiene el formato antes mencionado y no ha sido utilizado con anterioridad se deberá simular la pulsación de la tecla y almacenarlo en un fichero para no poder volver a utilizarlo.

Cómo podría hacer todo esto? Estoy un poco perdido en el asunto, tanto de lenguaje a usar  (conozco C, C++ y poco más), como de qué tipo de archivo tendría que crear y demás.

Gracias y un saludo!

3n31ch

#1
Saludos.

Si es como dices (que el lector de códigos de barra simula una entrada por teclado) no veo gran problema, pero tengo una duda, quieres el el programa permanezca oculto? osea que al iniciar en windows no se abra ninguna ventana que necesariamente necesite un focus para que los datos sean ingresados?

Te pregunto esto porque si es así entonces tu mejor opción (según mis conocimientos) es la que mencionas, C y C++, (supongo que con C++ es suficiente).

No es nada difícil que se cree el archivo .txt que mencionas, y tampoco te sera complicado mantener un registro ni pulsar una tecla. Eso si supongo que necesitaras de un thread que permita que este constantemente pendiente de la entrada del lector de códigos de barra (el cual dudo que simule uno por teclado, pero no se al respecto nada) ten en cuenta que si es como un teclado y quieres que funcione oculto tendrás un problema ya que prácticamente tendrás que crear un KeyLogger y tendrás que buscar la manera de identificar que lo que se ingresa es un código de barras y no la clave de facebook de un usuario.

Por otro lado si requieres que sea un programa común en donde si se vea la ventana del mismo y tengas que hacerle focus para que funcione (el usuario decide si ingresar el numero por teclado o por código de barras como si se tratara del cajero de un supermercado) no veo ningún problema, podrás utilizar prácticamente cualquier lenguaje de programación. Ya que no tendrás que acceder a información externa al programa (digo esto porque según se en Java no habría manera de poder crear algo que lea lo que se ingresa por teclado sin tener un focus en el programa mismo)

Me gustaría saber tus intenciones para poder darte una mejor respuesta, porque si tu proyecto es para una tienda o algo por el estilo. Considero que lo mas apropiado es que utilices una base datos mas que un archivo .txt (Me refiero a un programa que maneje grandes cantidades de datos)

PD: Por cierto lo de que inicie siempre con windows lo puedes arreglar poniendo tu ejecutable como programa de inicio en windows (Como si de Skype se tratase)

man3l3t

Ya lo resolví. Al final hice un programa en c++ conectando con una base da datos mysql.

Gracias y saludos!

man3l3t

#3
Pues he tenido un fallo técnico. Parece que si que funciona pero ha sido probar MAME (emulador de recreativas) y ya no funciona. Me explico: leo con el lector un código que pone una serie de dígitos y al tener esa combinación concreta simula pulsaciones de la tecla "c". Como se ve en el siguiente video, esto funciona correctamente en un bloc de notas.

El problema viene cuando abro el emulador, el cual tiene mapeada la tecla "c" para dar créditos. Si paso el código de barras por el lector no me da ningún crédito, en cambio si pulso la tecla "c" del teclado si. Mi sorpresa fue cuando al cerrar el emulador y abrir el bloc de notas ya no se ponían las simulaciones de la tecla "c".

[youtube=640,360]https://www.youtube.com/watch?v=EzWq-DxKxiI[/youtube]

¿Cuál puede ser el problema?

Saludos!

.::IT::.

Y porque mejor no imprimes un código de barras escriba las CCCCCC, code 128 por ejemplo soporta caracteres, no se puede  capturar las pulsaciones del teclado sin tener el foco en una ventana de tu programa, puedes hacer 2 cosas la primera y mas recomendable es escribir un filtro de controlador (https://msdn.microsoft.com/en-us/library/windows/hardware/ff545890%28v=vs.85%29.aspx) asi solo tu programa seria el que reconozca las pulsaciones de lector de codigo de barras lo otro es usar las api de windwos para capturar las pulsaciones de un determinado teclado mira aqui hay un ejemplo en C# http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/. Aunque tambien podrias escribir una especie de keylogger que capture las pulsaciones de todos los teclados y utilice sendkey para enviar ciertas teclas no se que tanto funcione pero bueno si publicas en un foro de programacion te pueden ayudar
Simplemente .::IT::.