Trong móc nối bàn phím của tôi, mỗi phím bấm sẽ nhận được một lá cờ cho biết nó có được tiêm hay không. http://msdn.microsoft.com/en-us/library/ms644967(VS.85).aspxLàm cách nào để sử dụng cờ 8 bit cấp thấp làm điều kiện?
Tôi đã cất một KBDLLHOOKSTRUCT từ lParam. Tôi có thể truy cập kbd.flags.XXX. Tôi chỉ không biết cách chuyển đổi cờ 8 bit này thành một loại điều kiện loại if (injected) {...
mà tôi biết cách sử dụng.
Nếu một trong các bạn loại khoa học máy tính thông minh sẽ giúp tôi hiểu tôi thực sự đánh giá cao nó.
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
KBDLLHOOKSTRUCT kbd = new KBDLLHOOKSTRUCT();
Marshal.PtrToStructure(lParam, kbd);
//if (injected) {...
Chúc mừng!
này (và những người khác ở đây mà tôi đã cố gắng) đang ném một 'Một ngoại lệ cơ hội đầu tiên của loại 'System.ArgumentException' xảy ra trong foofoo.exe' Có vẻ là rối tung lên mã móc nối bàn phím trước đó tôi đã có là tốt. Đưa cái gì? Nó cũng không biên dịch trừ khi tôi thêm dấu ngoặc đơn: 'bool isInjected = ((kbd.flags & LLKHF_INJECTED)! = 0);' ... là việc thay đổi mã? – cksubs
Các parens bổ sung không thay đổi mã - chúng chỉ sửa lỗi ưu tiên ngớ ngẩn của tôi. Đã cập nhật câu trả lời. – itowlson
Không biết ArgumentException đến từ đâu, vì bạn chỉ đọc từ trường cờ. Là một ngoại lệ thực sự được ném hoặc là nó chỉ là một thông báo gỡ lỗi về một ngoại lệ cơ hội đầu tiên (tức là bị bắt và xử lý nội bộ trong CLR)? Nếu trước đây, dấu vết ngăn xếp của ngoại lệ là gì? Bạn vẫn nhận được nó nếu bạn chỉ Console.WriteLine (kbd.flags)?Khi bạn đã xem xét những điều này, bạn có thể muốn tạo một câu hỏi riêng biệt vì có thể không liên quan đến câu hỏi bit-twiddling thuần túy "làm cách nào để sử dụng cờ bitwise trong C#?", Nhiều khả năng là vấn đề marshalling. – itowlson