Tôi tìm thấy mã móc nối bàn phím này, mà tôi đang cố gắng sửa đổi một chút cho các mục đích của mình: http://blogs.msdn.com/toub/archive/2006/05/03/589423.aspxTôi có thể thay đổi đầu vào bàn phím của người dùng không?
Tổng quan, tôi muốn người dùng nhấn một phím, nói 'E' và có bàn phím trả về một ký tự khác, 'Z', cho bất kỳ ứng dụng nào đang được lấy nét.
Phương pháp có liên quan tôi đã thay đổi bây giờ trông giống như:
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
//The truely typed character:
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
KBDLLHOOKSTRUCT replacementKey = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));
replacementKey.vkCode = 90; // char 'Z'
Marshal.StructureToPtr(replacementKey, lParam, false);
//Now changed to my set character
vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
Giao diện điều khiển đầu ra một cách chính xác này như:
E
Z
T
Z
G
Z
etc.
TUY NHIÊN, trong ứng dụng tập trung vẫn còn loại 'E' thay vì 'Z' . Tại sao? Tôi đã thay đổi đầu vào bàn phím nối để chứa 'Z' thay vì 'E', và các dòng giao diện điều khiển cho thấy rằng nó đã được thay đổi một cách chính xác!
Như tôi đã hiểu, gọi return CallNextHookEx(_hookID, nCode, wParam, lParam);
là những gì sẽ gửi lệnh "in ngay bây giờ" này tới ứng dụng đang mở. Đó không phải là cách nó hoạt động? Có điều gì đó ngăn cản tôi nhập vào nhân vật tôi muốn không? Tôi biết các ứng dụng như AutoHotkey lấy khóa đầu vào, kiểm tra và trả về một ký tự khác. Làm thế nào để tôi làm như vậy ở đây?
Cảm ơn!
trong tò mò, ứng dụng này là gì? –
Nó không phải là một keylogger! :) Ứng dụng là công nghệ hỗ trợ.Hãy suy nghĩ bàn phím iPhone; đằng sau hậu trường, nó sửa đổi vùng chính, sửa lỗi rõ ràng và chạy mã thông minh khác để giúp bạn nhập nhanh hơn và chính xác hơn. Đây là một ứng dụng tương tự, nhưng đối với bàn phím đầy đủ. – cksubs