Процедура ловушки должна быть в dll, но она не обязательно должна отличаться от той, которую вы используете для установки ловушки. Причина, по которой в документации упоминается «отдельная DLL», заключается в том, что они предполагают, что код для установки ловушки будет находиться в exe, а не в DLL.
Хук WH_CALLWNDPROC должен видеть сообщения WM_SETFOCUS, я бы не ожидал, что хук WH_MSGFILTER их увидит, но я точно не знаю.
Вы должны знать, что если вы намереваетесь съесть сообщения WM_SETFOCUS, это НЕ помешает установить фокус на окно.
Какой бы ни была ваша проблема, крючок для Windows редко является лучшим решением. Если вы будете более конкретны в отношении того, что вы пытаетесь сделать, мы, вероятно, могли бы быть более полезными.