WH_MOUSE_LL 钩子回调:累加硬件鼠标位移 delta 并拦截,由追踪线程按固定帧率批量释放
| 538 | |
| 539 | // WH_MOUSE_LL 钩子回调:累加硬件鼠标位移 delta 并拦截,由追踪线程按固定帧率批量释放 |
| 540 | LRESULT CALLBACK MessageInput::MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) |
| 541 | { |
| 542 | if (nCode != HC_ACTION || wParam != WM_MOUSEMOVE) { |
| 543 | return CallNextHookEx(NULL, nCode, wParam, lParam); |
| 544 | } |
| 545 | |
| 546 | // 在关键初始化窗口期间,直接吞掉所有鼠标移动 |
| 547 | if (hook_block_mouse_.load()) { |
| 548 | return 1; |
| 549 | } |
| 550 | |
| 551 | auto* mouse_info = reinterpret_cast<MSLLHOOKSTRUCT*>(lParam); |
| 552 | auto* inst = s_active_instance_.load(); |
| 553 | if (!inst || !inst->handle_hardware_mouse_move(*mouse_info)) { |
| 554 | return CallNextHookEx(NULL, nCode, wParam, lParam); |
| 555 | } |
| 556 | |
| 557 | // 拦截原始硬件鼠标移动(稍后由追踪线程通过 SetCursorPos 一次性释放累积量) |
| 558 | return 1; |
| 559 | } |
| 560 | |
| 561 | void MessageInput::open_target_process() |
| 562 | { |
nothing calls this directly
no test coverage detected