Лучший способ приостановить крюк низкого уровня (winapi)

Я хотел бы знать, каков наилучший способ с точки зрения эффективности (использование процессора / памяти) временно приостановить / обойти низкоуровневый захват мыши / клавиатуры.

Текущее решение, которое я нашел, состоит в том, чтобы установить глобальную переменную «doHook» в примере, протестировать ее в обработчике ловушки и, если она не установлена, просто дать ему пройти с CallNextHookEx следующим образом:

    if ((nCode < 0) || (!doHook))
{
return CallNextHookEx(NULL, nCode, wParam, lParam);
}

Это хорошее решение? лучший способ?

Спасибо

0

Решение

У вас есть 2 варианта:

  • Снятие крючка целиком путем вызова UnhookWindowsHookEx.
  • Оставить крюк на месте и пропустить нормальную работу.

Низкий уровень клавиатура а также мышь Хуки несколько дорогостоящи, так как они вводят дополнительные переключатели контекста для обработки входных событий:

Хук […] не вводится в другой процесс. Вместо этого контекст переключается обратно на процесс, который установил хук, и он вызывается в своем первоначальном контексте. Затем контекст переключается обратно на приложение, которое сгенерировало событие.

По сути, ваш хук бездействия все еще использует тысячи тактов для переключения контекста, для всех входных событий. Чтобы свести к минимуму общее воздействие, вам следует рассмотреть возможность полного удаления крючка и его повторной установки при необходимости.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]