Вот ситуация. У меня есть два разных крючка окна, один из которых - глобальный крюк сорта WH_SHELL, который следит за новыми окнами верхнего уровня, второй - крючок потока WH_CALLWNDPROC, который установлен на некоторых из окон верхнего уровня, открытых первым крюк. Два крючка реализованы в разных DLL.PostMessage и CALLWNDHOOK, отсутствующие зарегистрированные сообщения?
Насколько я могу судить, оба крючка устанавливаются должным образом. Тем не менее, ничего я не отправляю в окна с крючками с
код сообщения> WM_USER
сообщение о регистрации когда-либо обрабатывается пользовательским крюком WH_CALLWNDPROC, но «нормальные» сообщения Windows передаются, думая, что это просто отлично.
код, который перехватывает на обнаруженное окно:
... Getting handle, mod, and procHook ...
DWORD threadId = GetWindowThreadProcessId(handle, NULL);
HHOOK hook = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)procHook, mod, threadId);
if(!PostMessage(handle, CUSTOM_MESSAGE, NULL, NULL))
{
... fetch and print error message ...
}
Тело самого крючка:
... Report sends a message to an agreed upon window with the passed wParam & lParam
Report(20, nCode);
if(nCode == CUSTOM_MESSAGE)
{
... This code is never reached ...
Report(50, ERROR_SUCCESS);
if(PerformTask())
Report(200, ERROR_SUCCESS);
else
Report(400, ERROR_SUCCESS);
}
... More code handling more messages in the same basic form
Первый отчет вызов является то, что подтверждает, что крюк установлен и работает, так как она сообщения назад куча сообщений в младшие подростки и двадцатые годы (ERASEBACKGROUND, PAINT и т. д.).
CUSTOM_MESSAGE определяется как WM_USER + 314. Сообщение, используемое для отчета (...) является WM_USER + 317.
Я с тех пор обновил свой код, чтобы использовать RegisterWindowMessage для получения UINT для отправки, мне было неправильно использовать WM_USER для межпроцессного общения.
Так, в основном, что не так с моим дизайном или с моим использованием оконных крючков и PostMessage? Если я опустил какие-либо подробности, дайте мне знать; есть много кода, и это уже довольно большой вопрос, поэтому я попытался включить только то, что, по моему мнению, имеет значение.
Как в стороне, есть ли лучший способ отлаживать крючки? Я использую моральный эквивалент cout < < ... все, отправляя сообщения в согласованное окно и отлаживая его WndProc.
Спасибо,
Montrose Кевин
Ах, вот и все. :) Рад, что ты понял это в конце. – Andy