Хук CallWndProc не получает все сообщения

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

Я использую этот проект для хука CallWndProc: http://www.codeproject.com/KB/system/WilsonSystemGlobalHooks.aspx

Практически для всех окон он отлично работает (x86 и x64), однако в некоторых окнах кажется, что он не может внедрить подключаемую DLL. В настоящее время у меня проблемы с Adobe Reader X. Из этого окна не приходят сообщения. Я думаю, это как-то связано с песочницей? Может ли кто-нибудь дать мне толчок в правильном направлении?

Код инициализации хука:

bool InitializeCallWndProcHook(int threadID, HWND destination)
{
  if (g_appInstance == NULL)
    return false;

  if (GetProp(GetDesktopWindow(), "WILSON_HOOK_HWND_CALLWNDPROC") != NULL)
    SendNotifyMessage((HWND)GetProp(GetDesktopWindow(), "WILSON_HOOK_HWND_CALLWNDPROC"), RegisterWindowMessage("WILSON_HOOK_CALLWNDPROC_REPLACED"), 0, 0);

  SetProp(GetDesktopWindow(), "WILSON_HOOK_HWND_CALLWNDPROC", destination);
  hookCallWndProc = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProcHookCallback, g_appInstance, threadID);

  return hookCallWndProc != NULL;
}

person Jelle Vergeer    schedule 13.10.2011    source источник
comment
Adobe — это компания, которая очень заботится о безопасности. Flash очевиден, но Reader не является исключением, учитывая, что он может отображать документы, которые запрещают копирование/вставку. Вам нужно будет связаться с ними для поддержки.   -  person Hans Passant    schedule 13.10.2011


Ответы (2)


Хм, попробуйте, может ли Spy++ перехватывать сообщения. Если может, то, очевидно, это не проблема с мерами безопасности. Однако Spy++ не может, тогда это практически невозможно.

Посмотрите, работает ли это: используйте хуки WH_CALLWNDPROC и WH_GETMESSAGE, поскольку, по-видимому, первый ловит только отправленные сообщения, а второй — только отправленные сообщения.

person Super Basic    schedule 13.12.2011
comment
Я только что попробовал это с Spy++, и Spy++ может получать сообщения от Adobe Reader X. Я попробую перехватчики WH_CALLWNDPROC и WH_GETMESSAGE, как только у меня будет свободное время. - person Jelle Vergeer; 13.01.2012

У меня есть аналогичная проблема в моем приложении. Посетите следующую ссылку:

Странное поведение хуков Windows

Я предполагаю, что приложение прерывает цепочку функций фильтра, не вызывая метод CallNextHookEx. Обратите внимание, что это возможно только при использовании хуков WH_CBT.

person Community    schedule 25.09.2012
comment
Хм, я попробую сегодня позже, если Outlook работает с моим крючком CBT. Альтернативой также может быть этот хук оболочки: msdn.microsoft.com/en-us/library/windows/desktop/. Этот хук также используется панелью задач Windows. - person Jelle Vergeer; 26.09.2012