2008-09-03 40 views
5

Tôi đang viết một hệ thống C# POS (điểm bán hàng) lấy đầu vào từ đầu đọc thẻ ghi âm wedge bàn phím. Điều này có nghĩa rằng bất kỳ dữ liệu nào nó đọc từ một sọc mag được nhập như thể nó đã được gõ trên bàn phím rất nhanh chóng. Hiện tại tôi đang xử lý việc này bằng cách đính kèm vào sự kiện KeyPress và tìm kiếm một loạt các lần nhấn phím rất nhanh có chứa các ký tự gửi thẻ swipe.Cách tốt nhất để xử lý đầu vào từ bàn phím "nêm"

Có cách nào tốt hơn để xử lý loại đầu vào này không?

Chỉnh sửa: Thiết bị chỉ hiển thị dữ liệu dưới dạng tổ hợp phím và không giao diện thông qua một số trình điều khiển khác. Ngoài ra chúng tôi sử dụng một loạt các loại thiết bị như vậy lý tưởng một phương pháp nên làm việc độc lập với mô hình cụ thể của nêm được sử dụng. Tuy nhiên, nếu không có lựa chọn nào khác tôi sẽ phải làm.

Trả lời

10

Một điều bạn có thể làm là bạn có thể định cấu hình trình đọc nêm của mình để trình bày một hoặc nhiều ký tự thoát trước hoặc sau chuỗi. Bạn sẽ sử dụng các ký tự thoát này để biết rằng bạn sắp có (hoặc chỉ có) một đầu vào ký tự đại diện.

Kỹ thuật tương tự này được các thiết bị đọc mã vạch sử dụng để ứng dụng của bạn biết tập trung hoặc xử lý dữ liệu đầu vào từ thiết bị.

Âm tính với phương pháp này là bạn phải định cấu hình đúng thiết bị bên ngoài của mình. Đây có thể là vấn đề triển khai.

Điều này giả định rằng thiết bị của bạn chỉ trình bày dữ liệu dưới dạng tổ hợp phím và không giao diện thông qua một số trình điều khiển khác.

0

Tôi thứ hai @jttraino's idea.

Đó là cách để đi cho trình đọc mã vạch/quét mã vạch và các thiết bị khác đang cắm và phát (PnP). Tôi đã sử dụng kỹ thuật tương tự để cấu hình một vài máy quét mã vạch 1D và 2D trong nhiệm vụ trước đây của tôi.

2

Tôi nghĩ rằng bạn đang xử lý nó một cách chấp nhận được, chỉ cần cẩn thận về tốc độ gửi thẻ của dữ liệu, chúng tôi có máy quét mã vạch không dây, và bây giờ và một lần nữa họ ném các nét chính vào bàn phím ứng dụng để xử lý.

cũng nếu bạn đang phân phối phần mềm của mình cho các lãnh thổ khác, thì có thể khác nhau, ví dụ ở Tây Ban Nha (tôi nghĩ, nhưng có thể là Pháp) dòng trên cùng của bàn phím! "£ $%^& () trái ngược với Hoa Kỳ/Vương quốc Anh 1234567890 và nếu trình đọc thẻ của bạn được đặt thành usa/uk thì nó sẽ gửi! "£ $%^&() thay cho 1234567890, vì nêm chỉ mô phỏng khóa được nhấn và nếu các cửa sổ giải thích nó khác thì đó là vấn đề của bạn.

1

Một phiếu bầu khác cho jttraino's idea. Tôi làm tương tự với các đầu đọc thẻ và đầu đọc trong các hệ thống điểm bán hàng, nơi chúng tôi cần hỗ trợ nêm bàn phím cũng như USB và RS232.

Về cơ bản, chọn một chuỗi ký tự ngắn không đến từ bàn phím và lập trình vòng xử lý tin nhắn của bạn để xem các ký tự này đến. Nếu bạn nhận được một chuỗi ký tự hoàn chỉnh phù hợp với mẫu của mình, bạn có thể giải mã phần còn lại của đầu vào cho đến khi bạn nhấn chuỗi 'kết thúc' được chỉ định hoặc cho đến khi bạn quyết định chuỗi sắp đến bị lỗi. Chọn một chuỗi khó hoặc không thể, để nhập từ bàn phím thông thường vào ứng dụng của bạn cho những thứ như chỉnh sửa mặt nạ và hành vi của các màn hình khác nhau của bạn.

Điểm khởi đầu tốt là thứ giống như tilda-pling (~!) vì các ký tự đó không có khả năng xuất hiện trong chi tiết cá nhân của bất kỳ ai và không bao giờ cần xuất hiện cùng nhau trong văn bản ghi chú, v.v.-)

Mặt khác, chính xác như jttraino nói, là bạn sẽ có lẽ phải cấu hình/lập trình mỗi thiết bị đọc. Một số nhà sản xuất làm cho việc này khá dễ thực hiện - bạn đang sử dụng bộ công cụ nào? Magtek? Welch Allyn?

3

Bạn cũng có thể sử dụng API nhập liệu thô nếu bạn biết ID phần cứng của thiết bị trước thời hạn. I blogged about this recently. Nó có thể bị điên nhưng nó thỏa mãn yêu cầu của tôi: mục tiêu chính trong trường hợp của tôi là có thể nhận được đầu vào ngay cả khi ứng dụng bị mất tiêu điểm vì ai đó vô tình va vào thứ gì đó trong khi lục lọi xung quanh để quét các vật phẩm trên pallet. Mục tiêu thứ hai là tôi không thể thêm bất kỳ ký tự sentinel nào vì điều đó sẽ phá vỡ các ứng dụng của bên thứ ba hiện có đang được sử dụng với các súng quét.

Tôi đã thực hiện phương thức ký tự đã gửi trước đó, tuy nhiên, cả hai đều thông qua KeyPress đính kèm hoặc móc bàn phím mức thấp qua SetWindowsHookEx() hoặc qua KeyPreview trên biểu mẫu chính của ứng dụng. Nếu nó đáp ứng yêu cầu của bạn, nó chắc chắn đơn giản hơn nhiều và dễ dàng hơn để sử dụng phương pháp đó và để kết thúc tôi thứ hai các khuyến nghị đã được đưa ra.

Các vấn đề liên quan