Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Хук и смена процедуры окна

6.2K
16 января 2004 года
bart
2 / / 08.01.2004
Ставлю хук
g_hhook=::SetWindowsHookEx(WH_GETMESSAGE, reinterpret_cast<HOOKPROC>(GetMsgProc),(HINSTANCE)g_hInstDll,dwThreadId);
Посылаю сообщение
PostMessage(hwnd,UM_SET_PROC,(WPARAM)SubclassWndProc,0);
вот функция GetMsgProc:

Код:
LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
{
MSG *ps=(MSG *)lParam;
if (nCode < 0)
{
 return CallNextHookEx(g_hhook,nCode,wParam,lParam);
}
if (ps->message==UM_SET_PROC)
{
 g_OldWndProc=(WNDPROC)GetWindowLong(ps->hwnd,GWL_WNDPROC);
 SetWindowLong(ps->hwnd,GWL_WNDPROC,(LONG)SubClassWndProc);

 SendMessage(ps->hwnd,UM_RESET_HOOK,0,0);  
 PostThreadMessage(g_dwThreadIdExe,UM_HOOK_DONE,0,0);
 return 0;
}
return CallNextHookEx(g_hhook,nCode,wParam,lParam);
}


Всё работает...
Не понятно только почему в процедуру SubClassWndProc поступает сообщение UM_SET_PROC с параметрами wParam=0x01001005 lParam=0. И это не зависит от того как я задефайню UM_SET_PROC.
Я думал, что может это после смены процедуры моё сообщение дальше передается, но нет.... я передаю в wParam другое число и вообще из GetMsgProc возвращаю 0, значит обработал....
Хук ведь можно снимать?
Кстати в процедуре SubClassWndProc, в обработчике UM_SET_PROC, если wParam==0x01001005, хоть я 0 возвращаю, хоть передаю дальше:
return CallWindowProc(g_OldWndProc,hwnd,uMsg,цParam,lParam);
Всё равно мой эксплоер виснет =)...
6.2K
17 января 2004 года
bart
2 / / 08.01.2004
Всем пасиб...
просто посылать сообщение UM_SET_PROC нужно было потоку:
 
Код:
PostThreadMessage(dwThreadId,UM_SET_PROC,
(WPARAM)SubClassWndProc,(LPARAM)hwndShell_TrayWnd)

хотя я так и не понял почему окну нельзя:
 
Код:
PostMessage(hwndShell_TrayWnd,UM_SET_PROC,(WPARAM)SubClassWndProc,0);

но главное что пашет...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог