Я пытаюсь создать ловушку Windows, специально для перехвата сообщений HSHELL_WINDOWCREATED.
Тем не менее, мой обработчик крюка никогда не вызывается.
My dll имеет функцию для установки хука:
hHook = SetWindowsHookEx(WH_SHELL, (HOOKPROC)CreateWindowHook, hinst, 0);
hinst был заполнен DllMain () в сообщении DLL_PROCESS_ATTACH.
CreateWindowHook определяется как:
LRESULT CALLBACK CreateWindowHook(int code, WPARAM wParam, LPARAM lParam) {
if (code == HSHELL_WINDOWCREATED) {
// snip
}
return CallNextHookEx(0, code, wParam, lParam);
}
Я ожидаю, что proc будет вызываться всякий раз, когда создается новое окно верхнего уровня, но оно никогда не вызывается. Что мне не хватает?
Спасибо.
Дополнительная информация:
Согласно этой статье - http://msdn.microsoft.com/en-us/library/ms644959(VS.85).aspx - приложение, которое хочет получать сообщения WH_SHELL, должно зарегистрироваться через SystemParametersInfo ():
MINIMIZEDMETRICS st;
st.cbSize = sizeof(MINIMIZEDMETRICS);
st.iArrange = ARW_HIDE;
BOOL ret;
ret = SystemParametersInfo(
SPI_SETMINIMIZEDMETRICS,
sizeof(MINIMIZEDMETRICS),
&st,
0);
Этот вызов сделан в dll или в приложении, которое загружает dll, содержащую хук, или это не имеет значения?