2013-02-25 26 views
5

Many examples sử dụng keybd_event, có giá trị 0x45 cho tham số bScan.Ý nghĩa của giá trị tham số bScan 0x45 trong keybd_event là gì?

Ý nghĩa của giá trị 0x45 đó là gì?

Tôi đã ở dưới ấn tượng 0x45 was a keyboard scancode, nhưng vì nó được sử dụng cho một số lượng khóa khác nhau, tôi không chắc chắn về điều đó nữa.

Mục tiêu của tôi là sử dụng keybd_event hoặc từ .NET P/Invoke hoặc từ Delphi và làm cho các loại hạn chế hơn (sử dụng ví dụ enums hoặc enum gắn cờ) để mã của tôi trở nên dễ bảo trì hơn.

Trả lời

5

Đây thực sự là mã quét và đối với nhiều bàn phím, đó là mã quét cho khóa NumLock.

Mã ví dụ được đính kèm với tài liệu của keybd_event là ví dụ về cách chuyển đổi trạng thái NumLock. Và vì vậy tự nhiên 0x45 được sử dụng làm mã quét. Tôi đoán là rất nhiều ví dụ khác mà bạn thấy đơn giản là sao chép một cách mù quáng giá trị đó từ ví dụ MSDN keybd_event. Kể từ applications typically ignore the scan code và trả lời mã khóa ảo, thường không quan trọng giá trị nào được truyền dưới dạng mã quét.

Cuối cùng, bạn sẽ muốn sử dụng SendInput thay vì keybd_event. Lý do là rằng trước đây cho phép bạn đặt một chuỗi các sự kiện trong hàng đợi. Với keybd_event bạn đặt các sự kiện trong hàng đợi cùng một lúc và có thể các sự kiện giả mạo của bạn có thể bị xen kẽ với các sự kiện thực. Và vấn đề đó là một trong những lý do chính tại sao SendInput được giới thiệu.

+1

Delphi bỏ qua thông tin mã quét, ví dụ khi tạo sự kiện 'OnKeyDown'. Nếu ai đó cần trích xuất mã quét chính, anh ấy sẽ xử lý các thông báo cửa sổ tương ứng (ex WM_KEYDOWN) trực tiếp. – kludg

+0

Cảm ơn. Tôi sẽ cung cấp cho [SendInput] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310) và [P/Invoke SendInput] (http://www.pinvoke.net/default. aspx/user32.sendinput) một shot. Sẽ quay lại sau này. –

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