En una computadora tengo tanto un teclado normal como un escáner de código de barras que emula un teclado. Cuando mi aplicación recibe entrada de teclado, ¿cómo puedo determinar si esa entrada proviene del escáner de código de barras o del teclado real?¿Cómo puedo saber si la entrada del teclado proviene de un escáner de código de barras?
Respuesta
Obtendrás la opinión de ambos. No simultáneamente, por supuesto. Todo se colocará en una cola, pero Windows procesará los eventos clave de ambos teclados.
No se desanime, sin embargo. Como sugiere David Heffernan, puede resolver esto fácilmente al conectar ambos teclados a su computadora, abrir el Bloc de notas y escribir caracteres aleatorios para ver cuál genera la entrada.
Responde que quiere "verificar eso con el código C#", pero no tengo idea de lo que eso significa. ¿Qué tal crear una aplicación de consola que lea la entrada desde el teclado y la muestre en la pantalla?
using System;
class AdvancedKeyboardTester
{
static void Main(string[] args)
{
for (; ;)
{
Console.ReadKey();
}
}
}
Prensa Ctrl +C cuando se cansan de la diversión y desea salir del programa.
Editar: Parece que usted está buscando la RegisterRawInputDevices
function, lo que le permite activar la entrada bruta para todas sus teclados y, a continuación, enumerar a través de los resultados para determinar qué dispositivo ha enviado el mensaje.
Afortunadamente, parece que alguien ya ha escrito una biblioteca de C# envoltorio para esto, está disponible para su descarga en Proyecto Código: Using Raw Input from C# to handle multiple keyboards
Edición 2: (parece que la información sólo sigue engañando desde los comentarios)
Si está utilizando un escáner de código de barras, esto se vuelve mucho más fácil. Debido a que están explícitamente diseñados para este propósito, son casi todos programables. Lo que significa que puedes decirles que prefijan (y/o sufijan) su entrada con algunos caracteres centinela que indican que la entrada proviene del escáner de código de barras, en lugar de un teclado estándar. (Consulte el manual del usuario del escáner de códigos de barras para obtener más información.) Luego, todo lo que tiene que hacer es filtrar la entrada del teclado en función de la presencia o ausencia de esos caracteres centinela. También puede verificar qué tan rápido se ingresaron los caracteres entre el prefijo y el sufijo.
ok.usted realmente me ayuda. Pero no puedo aclarar esto: todo lo que tiene que hacer es filtrar la entrada del teclado en función de la presencia o ausencia de esos caracteres centinela. –
@raha: Correcto, básicamente puedes configurar el escáner para enviar algunos caracteres que básicamente le dicen a la computadora "hola, soy yo". Cuando ve esos caracteres en su flujo de entrada, sabe que la información proviene del escáner de código de barras, no de algo que el usuario escribió en el teclado. ¿Revisó el manual que vino con su escáner de código de barras? Debería tener más información sobre esto. –
gracias querido Cody Gray.¡Yo lo tengo, finalmente! Lo voy a comprobar. (¡Todavía no lo tengo!). –
Esto depende del sistema operativo, sin embargo, encontrará que en la mayoría de los sistemas operativos modernos obtendrá entradas simultáneas de ambos. El mejor método sería probarlo en su plataforma.
Evite tener tanto la gente escriba al mismo tiempo;)
uso windows xp. –
Tome un vistazo a MultiPoint SDK de Microsoft
(edit: esta respuesta ya no es aplicable ahora que la cuestión se ha aclarado que soy. dejándolo aquí para que otros lo descubran)
ok.thanks.but ¿podría explicar un poco sobre MultiPoint SDK de Microsoft? –
¿Cómo funciona esto con ** teclados **? –
Vea http://en.wikipedia.org/wiki/Windows_MultiPoint_Mouse_SDK: "Se pueden agregar varias estaciones a una computadora host WMS 2010 conectando un único monitor, concentrador USB 2.0, teclado y mouse para cada estación". –
Haga que un detector de eventos verifique el tiempo de demora entre las teclas. Un escáner de código de barras enviará pulsaciones de tecla muy rápido, mientras que la entrada de un ser humano usando el teclado será comparativamente lenta. Sé que esto funcionará porque lo he hecho usando Javascript en una aplicación web.
No conozco la programación C#, así que acabo de darte la lógica. ¡Día feliz!
Probar:
Dim PreviousKeyPressTime As DateTime = Nothing
Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
If e.KeyCode = Keys.Enter Then
PreviousKeyPressTime = Nothing
TextBox1.Text = String.Empty
Else
If PreviousKeyPressTime = Nothing Then
PreviousKeyPressTime = DateTime.Now
End If
Dim startTime As DateTime = Now
Dim runLength As Global.System.TimeSpan = startTime.Subtract(CType(Me.PreviousKeyPressTime, DateTime))
Dim millisecs As Integer = runLength.Milliseconds
Dim secs As Integer = runLength.Seconds
Dim TotalMiliSecs As Integer = ((secs * 1000) + millisecs)
lblDiff.Text = TotalMiliSecs
If TotalMiliSecs <= 50 Then
lblMsg.Text = String.Empty
Else
lblMsg.Text = "keyboard Input not Allow"
End If
PreviousKeyPressTime = DateTime.Now
End If
End Sub
Sería aún mejor si explicaras el código que publicaste.Además, el enlace del blog está muerto desde el momento de la escritura. –
Este código mide la velocidad de entrada de las teclas y si son demasiado lentas determina que una persona está escribiendo. No puedo decir si realmente funciona, pero esa es la intención del código. – Hucker
Casi todos los lectores de códigos de barras se pueden configurar con un prefijo y un sufijo a lo que se lee. Intente configurar el suyo con, por ejemplo, un prefijo de "*" y un sufijo de, y luego en su código C#, fuerce el enfoque a un cuadro de texto invisible cuando * provenga de la secuencia de entrada, y en el evento lostfocus de este cuadro de texto poner todo el código para procesar la entrada. Tenga en cuenta, sin embargo, que el personaje que elige ser el prefijo nunca se ingresa en el teclado. Además, establezca la propiedad Tabstop del cuadro de texto en falso, solo para evitar que el usuario llegue al objeto cuando navega por la pantalla. Buena suerte !
Aquí hay algo modelado de la respuesta de @ asif. Es para usar en una aplicación WPF, está en C# y ha sido probado. Fui con Stopwatch porque es más preciso que datetime, lo encontrará en el espacio de nombres System.Diagnostics
.
Quería que la mía capturara texto cuando la aplicación (no un cuadro de texto específico) estaba enfocada, por lo que también es un poco diferente. Verá eso para manejarlo correctamente, ya que no sé qué se inserta el personaje real, solo la enumeración Key
. Como me importan principalmente los números del 1 al 10 y las enumeraciones son D1
, D2
, etc., me quito la parte D cuando es necesario.
Stopwatch _inputStopwatch = new Stopwatch();
string _input = "";
private void Window_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
_inputStopwatch.Reset();
HandleBarcode(_input);
_input = "";
}
else
{
if (!_inputStopwatch.IsRunning)
_inputStopwatch.Start();
else if (_inputStopwatch.ElapsedMilliseconds > 50)
{
_inputStopwatch.Restart();
_input = "";
}
Console.WriteLine("DEBUG: " + e.Key + " - " + _inputStopwatch.ElapsedMilliseconds + "ms");
var keyString = e.Key.ToString();
if (keyString.Length == 2 && keyString.StartsWith("D"))
keyString = keyString[1].ToString();
//if (_inputStopwatch.ElapsedMilliseconds < 50)
_input += keyString;
//else
// _input = "";
_inputStopwatch.Restart();
}
}
private void HandleBarcode(string barcodeInput)
{
//do stuff with the barcode input
}
- 1. Lectura de un código de barras utilizando un escáner de código de barras USB ignorando la entrada de datos del teclado mientras no se conoce el identificador del producto del escáner y la identificación del proveedor
- 2. ¿Cómo crear un escáner de código de barras (Android)?
- 3. lectura desde el escáner de código de barras
- 4. Escáner de código de barras Quartz Composer
- 5. ¿Cómo saber si una solicitud proviene de un proxy?
- 6. Investigación de escáner de código de barras USB
- 7. jQuery: ¿Cómo puedo escuchar la entrada general del teclado?
- 8. ¿Cómo puedo saber si un evento proviene de la tecla Ctrl derecha?
- 9. escáner de código QR ZXing sin necesidad de instalar escáner de código de barras
- 10. ¿Cómo saber de dónde proviene la alerta?
- 11. ¿Puedo cambiar la entrada del teclado de un usuario?
- 12. Cómo leer datos del escáner de código de barras bluetooth Símbolo CS3070 a dispositivo Android
- 13. escáner de código de barras en JavaScript? O complemento/extensión
- 14. API para el escáner de código de barras IOS PDF417
- 15. ¿Cómo manejar los datos binarios devueltos desde el escáner de código de barras?
- 16. Detecta cuando el cuadro de entrada se llena con el teclado y cuando se utiliza un escáner de código de barras.
- 17. ¿Incluye un escáner de código de barras en la aplicación web móvil sin ser nativo?
- 18. Averigüe si la solicitud de ASP.NET proviene del equipo local
- 19. zxing escáner de código de barras en un div fijo en la aplicación para Android phonegap
- 20. ¿El uso de un escáner de código de barras como una cuña de teclado implica que no puede confirmar la recepción del escaneo?
- 21. Manejar el valor del escáner de código de barras a través del dispositivo Android
- 22. ¿Cómo integrar Zxing sin instalar la aplicación de escáner de código de barras?
- 23. Añadiendo menú al escáner de código de barras de ZXings, y apretando la vista de superficie
- 24. Manejo efectivo de la entrada del teclado
- 25. Llamar al escáner de código de barras con un clic del botón en la aplicación de Android
- 26. Escáneres PHP y de código de barras
- 27. Escáneres de código de barras de interfaz USB
- 28. ¿Cómo saber si una publicación proviene de una llamada ajax en codeigniter?
- 29. ¿Es posible que cualquier escáner de códigos de barras de iPhone escanee código de barras de la página web y vuelva a introducir el código en la página?
- 30. Android: Detectar inactividad del usuario/Detectar (teclado) entrada de teclado
1. Abra el Bloc de notas. 2. Escriba en los teclados para ver cuál produce entrada. –
gracias, pero quiero comprobarlo con el código C# !! –
@raha ¿Por qué quieres hacer eso? –