2009-11-22 3 views
2

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

Я провел последний день, прочесывая googles, а также codeguru, codeproject и msdn, но мне кажется, что я делаю это правильно, хотя я явно не знаю. Может ли кто-нибудь помочь указать мне в правильном направлении?

#pragma data_seg(".SHARE") 
HWND hWndServer = NULL; 
HHOOK g_shell_hook = NULL; 
#pragma data_seg() 
#pragma comment(linker, "/section:.SHARE,RWS") 

TASKBAR_API int StartShellHook(HWND hWnd) 
{ 
    g_shell_hook = SetWindowsHookEx(WH_SHELL, ShellProc, g_dll_module_handle, 0); 
    if(g_shell_hook) 
     hWndServer = hWnd; 
    return (g_shell_hook != NULL); 
} 

Вот мой код для подключения в оболочке, все кажется правильным для меня, но опять же, его не давая надлежащего вывода. В настоящее время функция ShellProc настроена только для создания тривиальной инкрементальности переменных в окнах, создающих и уничтожающих сообщения, только для строки, на которую нужно поставить точку прерывания, но программа только попадает на разрывы для сообщения об уничтожении локального окна. снова любая помощь была бы фантастической, спасибо вам заблаговременно.

ответ

0

Одна из причин, по которой это может произойти, заключается в том, что вы скомпилировали 32-разрядную DLL и пытаетесь запустить ее в 64-разрядной ОС. В общем, что вы пытаетесь выполнить, установив этот крючок? Крюки трудно получить право, и они подлежат регистрации, если вы слишком долго занимаетесь обработчиком.

+0

Я составляю 32-разрядную DLL, но я тоже на 32-разрядной ОС, так что это не проблема. Я пытаюсь написать add для RocketDock, который действует как панель задач Windows, в котором он показывает вам, какие программы у вас запущены, даже если RocketDock еще не имеет ярлыка для этой программы и даже если программа не сведена к минимуму. Если есть лучший способ достичь этой цели, я все уши, но, похоже, в Интернете есть удивительно мало информации об этом. – etna

0

Вы можете попробовать использовать окно в качестве оболочки (если у вас есть HWND-дескриптор где-то в вашем приложении): RegisterShellHookWindow. Таким образом, вы получите глобальные уведомления о оболочке о созданных и уничтоженных окнах через насос сообщений окна.

Смежные вопросы