Поворот qq назад от кадра M к R
qq_R = q ^ -1 * qq * q
Разница заключается в поведении при вызове обратного вызова. Если вы используете низкоуровневую версию, вы не сталкиваетесь с ограничениями, налагаемыми lpfn из-за способа выполнения вызова вашей функции перехвата. Пожалуйста, прочтите ниже для получения дополнительной информации. Цитата из документа MSDN для SetWindowsHookEx:
lpfn [in] Указатель на подключаемую процедуру. Если параметр dwThreadId равен нулю или указывает идентификатор потока, созданного другим процессом, параметр lpfn должен указывать на подключаемую процедуру в DLL. В противном случае lpfn может указывать на подключаемую процедуру в коде, связанном с текущим процессом.
и из LowLevelKeyboardProc:
ловушка WH_KEYBOARD_LL не вводится в другой процесс. Вместо этого контекст переключается обратно на процесс, установивший ловушку, и вызывается в исходном контексте. Затем контекст переключается обратно на приложение, создавшее событие.