Проблема с WH_SHELL - PullRequest
       8

Проблема с WH_SHELL

2 голосов
/ 14 июля 2009

Я пытаюсь создать ловушку 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, содержащую хук, или это не имеет значения?

Ответы [ 3 ]

2 голосов
/ 15 июля 2009

Я недавно ответил на похожий вопрос на этот вопрос, это помогает? Как добавить системный «оконный хук», чтобы получать уведомления о создании / активации окон?

0 голосов
/ 15 июля 2009

Ваш hhook инициализирован и находится в общем разделе? подробности см. здесь .

0 голосов
/ 14 июля 2009

Вы работаете в Vista? Если это так, вы, вероятно, столкнулись с проблемой UAC. Указав 0 в качестве последнего параметра, вы запрашиваете глобальный хук. Это может сделать только как администратор.

Попробуйте перезапустить от имени администратора и посмотреть, решит ли это вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...