Saltar al pie de página
USO DE IRONBARCODE

Cómo Crear un Escáner de Códigos de Barras USB en C#

Si alguna vez has trabajado en ventas al por menor, almacenamiento o gestión de inventario, sabes lo cruciales que son los escáneres de códigos de barras para mantener las operaciones funcionando sin problemas. Con la biblioteca IronBarcode y sus potentes capacidades de validación y generación, puedes crear una aplicación robusta de escáner de código de barras USB en C# que va más allá de la captura de datos básicos de códigos de barras. También puede validar tus datos de código de barras, extraer información estructurada e incluso generar nuevos códigos de barras sobre la marcha.

En esta guía, te mostraré cómo integrar escáneres de códigos de barras USB con IronBarcode en C#. Al final, tendrás una solución de escaneo robusta y en tiempo real que funciona tanto con .NET Framework como con aplicaciones .NET, ayudándote a gestionar el inventario y rastrear artículos de manera más eficiente.

¿Cómo funcionan los escáneres de código de barras USB con IronBarcode?

La mayoría de los escáneres de códigos de barras USB operan en modo de teclado tipo HID (Dispositivo de Interfaz Humana), lo que significa que emulan la entrada de teclado, permitiendo a los usuarios escanear códigos sin esfuerzo. Cuando escaneas un código de barras, el escáner "escribe" los datos del código de barras seguidos de una tecla Enter. IronBarcode mejora esta entrada en bruto validando formatos, extrayendo datos estructurados y permitiendo la generación de códigos de barras inmediata en respuesta a los escaneos.

// Capture scanner input and validate with IronBarcode
private void txtBarcode_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Enter)
    {
        string scannedData = txtBarcode.Text;
        var results = BarcodeReader.Read(GenerateBarcodeImage(scannedData));
        if (results.Any())
        {
            ProcessValidBarcode(results.First());
        }
    }
}
// Capture scanner input and validate with IronBarcode
private void txtBarcode_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Enter)
    {
        string scannedData = txtBarcode.Text;
        var results = BarcodeReader.Read(GenerateBarcodeImage(scannedData));
        if (results.Any())
        {
            ProcessValidBarcode(results.First());
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Este código captura la entrada del escáner a través de un TextBox y usa IronBarcode para validar los datos escaneados, tratando de leerlos como un formato de código de barras válido, dándote control total sobre la entrada.

¿Cómo configurar su proyecto de escáner de código de barras?

Comienza creando una aplicación de Windows Forms en Microsoft Visual Studio y asegúrate de descargar la biblioteca IronBarcode. Luego instala la biblioteca IronBarcode a través de la Consola del Administrador de Paquetes NuGet ejecutando este comando:

Install-Package BarCode

Agrega estos espacios de nombres esenciales a tu formulario, junto con los ejemplos proporcionados en la documentación.

using IronBarCode;
using System.Drawing;
using System.Linq;
using IronBarCode;
using System.Drawing;
using System.Linq;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Crea un formulario simple con una sola caja de texto para capturar la entrada del escáner, asegurando que la configuración del puerto sea correcta. Configura el TextBox para recibir automáticamente el foco cuando el formulario se cargue, asegurando que tus datos de escáner USB siempre sean capturados.

¿Cómo validar códigos de barras escaneados con IronBarcode?

IronBarcode se destaca en validar y analizar datos de códigos de barras. Aquí está cómo verificar la entrada escaneada y extraer información significativa:

private void ProcessScannedBarcode(string scannedText)
{
    // Generate temporary barcode image from scanned text
    var barcode = BarcodeWriter.CreateBarcode(scannedText, BarcodeEncoding.Code128);
    // Validate by reading back
    var validationResults = BarcodeReader.Read(barcode.ToBitmap());
    if (validationResults.Any())
    {
        var validated = validationResults.First();
        // Extract barcode type and value
        string format = validated.BarcodeType.ToString();
        string value = validated.Value;
        lblStatus.Text = $"Valid {format}: {value}";
        // Process based on format
        if (format.Contains("EAN") || format.Contains("UPC"))
        {
            // Product barcode - lookup item
            ProcessProductCode(value);
        }
    }
    else
    {
        lblStatus.Text = "Invalid barcode format";
    }
}
private void ProcessScannedBarcode(string scannedText)
{
    // Generate temporary barcode image from scanned text
    var barcode = BarcodeWriter.CreateBarcode(scannedText, BarcodeEncoding.Code128);
    // Validate by reading back
    var validationResults = BarcodeReader.Read(barcode.ToBitmap());
    if (validationResults.Any())
    {
        var validated = validationResults.First();
        // Extract barcode type and value
        string format = validated.BarcodeType.ToString();
        string value = validated.Value;
        lblStatus.Text = $"Valid {format}: {value}";
        // Process based on format
        if (format.Contains("EAN") || format.Contains("UPC"))
        {
            // Product barcode - lookup item
            ProcessProductCode(value);
        }
    }
    else
    {
        lblStatus.Text = "Invalid barcode format";
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Este método valida la entrada del código escaneado creando un código de barras y leyéndolo nuevamente con IronBarcode, que sirve como una referencia confiable. Identifica el formato del código de barras (por ej., Código 128, EAN, UPC) y lo procesa en consecuencia. IronBarcode admite numerosos formatos, incluidos códigos QR, Data Matrix, PDF417 y todos los códigos de barras 1D comunes.

¿Cómo generar códigos de barras de respuesta a partir de una entrada escaneada?

Transforma los datos escaneados en nuevos códigos de barras para etiquetado, rastreo o gestión de inventarios:

private void GenerateInventoryLabel(string productCode)
        {
            // Create inventory code from scanned product
            string inventoryCode = $"INV-{DateTime.Now:yyyyMMdd}-{productCode}";
            // Generate new barcode with custom styling
            var inventoryBarcode = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.Code128);
            inventoryBarcode.AddAnnotationTextAboveBarcode(inventoryCode);
            inventoryBarcode.ResizeTo(300, 100);
            // Ensure labels folder exists
            System.IO.Directory.CreateDirectory("labels");
            // Save barcode PNG for printing
            string filePath = $"labels\\{inventoryCode}.png";
            inventoryBarcode.SaveAsPng(filePath);
            // Load a copy into the PictureBox
            if (pictureBoxReceipt.Image != null)
                pictureBoxReceipt.Image.Dispose();
            pictureBoxReceipt.Image = new System.Drawing.Bitmap(filePath);
        }
        // Alternative: Generate QR code for mobile scanning
        private void CreateQRResponse(string data)
        {
            var qrCode = QRCodeWriter.CreateQrCode(data);
            qrCode.ResizeTo(200, 200);
            System.IO.Directory.CreateDirectory("labels");
            string filePath = $"labels\\QR_{DateTime.Now:yyyyMMddHHmmss}.png";
            qrCode.SaveAsPng(filePath);
            if (pictureBoxQR.Image != null)
                pictureBoxQR.Image.Dispose();
            pictureBoxQR.Image = new System.Drawing.Bitmap(filePath);
        }
private void GenerateInventoryLabel(string productCode)
        {
            // Create inventory code from scanned product
            string inventoryCode = $"INV-{DateTime.Now:yyyyMMdd}-{productCode}";
            // Generate new barcode with custom styling
            var inventoryBarcode = BarcodeWriter.CreateBarcode(inventoryCode, BarcodeEncoding.Code128);
            inventoryBarcode.AddAnnotationTextAboveBarcode(inventoryCode);
            inventoryBarcode.ResizeTo(300, 100);
            // Ensure labels folder exists
            System.IO.Directory.CreateDirectory("labels");
            // Save barcode PNG for printing
            string filePath = $"labels\\{inventoryCode}.png";
            inventoryBarcode.SaveAsPng(filePath);
            // Load a copy into the PictureBox
            if (pictureBoxReceipt.Image != null)
                pictureBoxReceipt.Image.Dispose();
            pictureBoxReceipt.Image = new System.Drawing.Bitmap(filePath);
        }
        // Alternative: Generate QR code for mobile scanning
        private void CreateQRResponse(string data)
        {
            var qrCode = QRCodeWriter.CreateQrCode(data);
            qrCode.ResizeTo(200, 200);
            System.IO.Directory.CreateDirectory("labels");
            string filePath = $"labels\\QR_{DateTime.Now:yyyyMMddHHmmss}.png";
            qrCode.SaveAsPng(filePath);
            if (pictureBoxQR.Image != null)
                pictureBoxQR.Image.Dispose();
            pictureBoxQR.Image = new System.Drawing.Bitmap(filePath);
        }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Estos métodos demuestran las capacidades de generación de IronBarcode, creando códigos de barras formateados con anotaciones y tamaño personalizado. La generación de códigos QR muestra el soporte de IronBarcode para formatos 2D.

Cómo crear un escáner de código de barras USB en C#: Figura 2

¿Cómo crear una aplicación completa de escaneo de códigos de barras?

Aquí tienes un ejemplo completo que combina escaneo, validación y generación:

using IronBarCode;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace UsbBarcodeScanner
{
    public partial class InventoryScanner : Form
    {
        private List<string> scannedItems = new List<string>();
        public InventoryScanner()
        {
            InitializeComponent();
            // Wire the KeyDown event handler for scanner input
        txtScanner.KeyDown += txtScanner_KeyDown;
            // Focus the scanner TextBox when form loads
            this.Load += (s, e) => txtScanner.Focus();
        }
        private void txtScanner_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.SuppressKeyPress = true; // Prevents ding or extra chars
                string input = txtScanner.Text.Trim();
                if (string.IsNullOrEmpty(input))
                {
                    lblStatus.Text = "Please enter a barcode";
                    return;
                }
                try
                {
                    // Generate barcode (Code128)
                    var testBarcode = BarcodeWriter.CreateBarcode(input, BarcodeEncoding.Code128);
                    // Add to inventory
                    scannedItems.Add(input);
                    listBoxInventory.Items.Add($"{DateTime.Now:HH:mm:ss} - {input}");
                    // Generate receipt barcode
                    GenerateReceipt();
                    lblStatus.Text = "Item added successfully";
                }
                catch (Exception ex)
                {
                    lblStatus.Text = $"Error: {ex.Message}";
                    // Fallback: Try IronBarcode's image or PDF scanning
                    try
                    {
                        string backupFile = "backup.pdf"; // path to backup PDF
                        if (File.Exists(backupFile))
                        {
                            var results = BarcodeReader.ReadPdf(backupFile);
                            if (results.Any())
                            {
                                var first = results.First();
                                scannedItems.Add(first.Value);
                                listBoxInventory.Items.Add($"{DateTime.Now:HH:mm:ss} - {first.Value}");
                                GenerateReceipt();
                                lblStatus.Text = "Item added via PDF fallback";
                            }
                            else
                            {
                                lblStatus.Text += " (No barcodes found in backup PDF)";
                            }
                        }
                        else
                        {
                            lblStatus.Text += " (Backup PDF not found)";
                        }
                    }
                    catch (Exception fallbackEx)
                    {
                        lblStatus.Text += $" (Fallback failed: {fallbackEx.Message})";
                    }
                }
            }
            txtScanner.Clear();
            txtScanner.Focus();
        }
        private void GenerateReceipt()
        {
            string receiptCode = $"RCP{scannedItems.Count:D5}";
            var receipt = BarcodeWriter.CreateBarcode(receiptCode, BarcodeEncoding.Code93);
            receipt.AddAnnotationTextBelowBarcode($"Items: {scannedItems.Count}");
            // Ensure labels folder exists
            Directory.CreateDirectory("labels");
            string filePath = $"labels\\{receiptCode}.png";
            // Save barcode to file
            receipt.SaveAsPng(filePath);
            // Load into PictureBox safely
            if (pictureBoxReceipt.Image != null)
                pictureBoxReceipt.Image.Dispose();
            pictureBoxReceipt.Image = new Bitmap(filePath);
        }
    }
}
using IronBarCode;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace UsbBarcodeScanner
{
    public partial class InventoryScanner : Form
    {
        private List<string> scannedItems = new List<string>();
        public InventoryScanner()
        {
            InitializeComponent();
            // Wire the KeyDown event handler for scanner input
        txtScanner.KeyDown += txtScanner_KeyDown;
            // Focus the scanner TextBox when form loads
            this.Load += (s, e) => txtScanner.Focus();
        }
        private void txtScanner_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.SuppressKeyPress = true; // Prevents ding or extra chars
                string input = txtScanner.Text.Trim();
                if (string.IsNullOrEmpty(input))
                {
                    lblStatus.Text = "Please enter a barcode";
                    return;
                }
                try
                {
                    // Generate barcode (Code128)
                    var testBarcode = BarcodeWriter.CreateBarcode(input, BarcodeEncoding.Code128);
                    // Add to inventory
                    scannedItems.Add(input);
                    listBoxInventory.Items.Add($"{DateTime.Now:HH:mm:ss} - {input}");
                    // Generate receipt barcode
                    GenerateReceipt();
                    lblStatus.Text = "Item added successfully";
                }
                catch (Exception ex)
                {
                    lblStatus.Text = $"Error: {ex.Message}";
                    // Fallback: Try IronBarcode's image or PDF scanning
                    try
                    {
                        string backupFile = "backup.pdf"; // path to backup PDF
                        if (File.Exists(backupFile))
                        {
                            var results = BarcodeReader.ReadPdf(backupFile);
                            if (results.Any())
                            {
                                var first = results.First();
                                scannedItems.Add(first.Value);
                                listBoxInventory.Items.Add($"{DateTime.Now:HH:mm:ss} - {first.Value}");
                                GenerateReceipt();
                                lblStatus.Text = "Item added via PDF fallback";
                            }
                            else
                            {
                                lblStatus.Text += " (No barcodes found in backup PDF)";
                            }
                        }
                        else
                        {
                            lblStatus.Text += " (Backup PDF not found)";
                        }
                    }
                    catch (Exception fallbackEx)
                    {
                        lblStatus.Text += $" (Fallback failed: {fallbackEx.Message})";
                    }
                }
            }
            txtScanner.Clear();
            txtScanner.Focus();
        }
        private void GenerateReceipt()
        {
            string receiptCode = $"RCP{scannedItems.Count:D5}";
            var receipt = BarcodeWriter.CreateBarcode(receiptCode, BarcodeEncoding.Code93);
            receipt.AddAnnotationTextBelowBarcode($"Items: {scannedItems.Count}");
            // Ensure labels folder exists
            Directory.CreateDirectory("labels");
            string filePath = $"labels\\{receiptCode}.png";
            // Save barcode to file
            receipt.SaveAsPng(filePath);
            // Load into PictureBox safely
            if (pictureBoxReceipt.Image != null)
                pictureBoxReceipt.Image.Dispose();
            pictureBoxReceipt.Image = new Bitmap(filePath);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Esta aplicación de escáner con todas las funciones captura sin esfuerzo la entrada de tu escáner de código de barras USB, valida cada entrada usando IronBarcode y mantiene una lista de inventario en tiempo real, permitiéndote asegurar la precisión en tus datos. Genera automáticamente códigos de barras de recibo para cada artículo escaneado, brindándote retroalimentación visual instantánea. Como red de seguridad, IronBarcode también puede leer códigos de barras a partir de PDFs si el escáner de hardware falla. Para escenarios avanzados o solución de problemas, explora discusiones comunitarias en Stack Overflow o examina la documentación de dispositivos HID de Microsoft.

Cómo crear un escáner de código de barras USB en C#: Figura 3 - Salida de la aplicación de escáner completa con código de barras de recibo

Mejores prácticas para el manejo de errores

Al trabajar con escáneres USB e IronBarcode:

  • Formato inválido: Capture excepciones cuando BarcodeWriter encuentre datos no compatibles
  • Desconexión del escáner: Implemente la gestión de foco del TextBox para manejar la eliminación del escáner
  • Validación de datos: Use las codificaciones específicas de formato de IronBarcode para asegurar la compatibilidad de datos
  • Fallas de generación: Envuelva la generación de códigos de barras en bloques try-catch
  • Manejo de tiempo de espera: Considere implementar el temporizado de pulsaciones para diferenciar la entrada del escáner de la del teclado

Conclusión

IronBarcode transforma el simple escaneo de códigos de barras USB en aplicaciones de procesamiento de datos inteligentes que filtran y gestionan datos eficientemente. Al combinar la entrada del escáner de hardware con las capacidades de validación, generación y conversión de formatos de IronBarcode, puedes construir soluciones de escaneo robustas para cualquier industria. ¿Necesitas manejar escaneos de alto volumen? Considera las opciones de licencia que mejor se adapten a tus necesidades de implementación.

Comienza tu prueba gratuita para implementar el escaneo profesional de códigos de barras en tus aplicaciones de C# hoy.

Preguntas Frecuentes

¿Qué es IronBarcode y cómo se relaciona con los escáneres de código de barras USB?

IronBarcode es una biblioteca que permite a los desarrolladores construir aplicaciones robustas de C# para escaneo de códigos de barras USB. Ofrece funciones como validación de códigos de barras, extracción de datos y generación de códigos de barras.

¿Puede IronBarcode validar datos de código de barras de un escáner USB?

Sí, IronBarcode puede validar datos de códigos de barras capturados desde un escáner USB, asegurando la integridad y precisión de los datos en tus aplicaciones C#.

¿Cómo maneja IronBarcode la generación de códigos de barras?

IronBarcode puede generar nuevos códigos de barras al instante, permitiendo a los desarrolladores crear e imprimir códigos de barras fácilmente dentro de sus aplicaciones C#.

¿Existe soporte para manejo de errores en IronBarcode para el escaneo de códigos de barras USB?

Sí, IronBarcode incluye un manejo de errores completo para gestionar problemas comunes que pueden surgir durante la escaneo y proceso de códigos de barras USB.

¿Qué tipos de códigos de barras se pueden escanear con IronBarcode?

IronBarcode admite el escaneo de una amplia gama de simbologías de códigos de barras, incluyendo códigos QR, UPC, Código 39 y más, lo que lo hace versátil para diversas aplicaciones.

¿Puede IronBarcode extraer información estructurada de los códigos de barras escaneados?

Sí, IronBarcode puede extraer información estructurada de los códigos de barras escaneados, ayudando en el procesamiento y gestión eficiente de datos.

¿Cómo puedo comenzar a construir una aplicación de escáner de código de barras USB en C#?

Para comenzar a construir una aplicación de escáner de código de barras USB en C#, puedes utilizar IronBarcode junto con los ejemplos de código y la documentación proporcionada para guiar tu proceso de desarrollo.

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más