Я могу использовать функцию SetWindowsHookEx для подключения пользовательского KeyboardProc. В подключенной процедуре я могу вернуть 1
, чтобы заблокировать входной сигнал клавиатуры от приложения, однако то, что я пытаюсь сделать, это на самом деле изменить данные. Например. пользователь нажимает клавишу A
, и я бы хотел заменить его клавишей B
.Как изменить ключи в процедуре подключения KeyboardProc?
Но любые изменения, которые я вношу в аргументы WPARAM
и LPARAM
, как представляется, не имеют никакого эффекта в приложении, он все равно получит исходные ключи. Например. чтобы показать немного псевдокод:
LRESULT KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
memset(&wParam, 0, sizeof(WPARAM));
memset(&lParam, 0, sizeof(LPARAM));
// call the next procedure
return CallNextHookEx(keyHook, nCode, wParam, lParam);
}
Независимо от того, какие изменения я делаю двум параметрам он не будет иметь эффект, когда приложение считывает WM_KEYDOWN
сообщение будет получать оригинальные ключи, как они были поражены.
Можно ли каким-либо образом внести изменения в ключи?
Вы sureley изменяете paramse неправильный путь. Взгляните, какие биты актуальны. http://msdn.microsoft.com/en-us/library/windows/desktop/ms644984(v=vs.85).aspx – icbytes