Re[2]: Перехват создания программы...
От: Аноним  
Дата: 06.09.04 01:37
Оценка:
Здравствуйте, Esperar, Вы писали:

E>LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)

E>{
E> if(nCode < 0)
E> return CallNextHookEx(g_hHook, nCode, wParam, lParam);
E> if(nCode == HCBT_CREATEWND)
E> {
E> CHAR szClassName[256]={0};
E> int nRet = GetClassName(reinterpret_cast<HWND>(wParam), szClassName, 255);
E> CHAR szBuf[255]={0};
E> wsprintf(szBuf, "создалось %s", szClassName);
E> MessageBox(0, szBuf, "!!!", 0);
E> }
E> return CallNextHookEx(g_hHook, nCode, wParam, lParam);
E>}

спасибо вам огромное за код.
По этому поводу есть еще пара вопросов, подскажите кто знает...
1)почему я не могу убрать из этого кода вызов MessageBox, как только это делаю
программа начинает ругаться: 'Access violation at address 00000000. Read of address
00000000'
2)как перехватывать открытие только главного окна, не трогая дочерних!!!!!!!!
3)как получить имя EXE'шника(и путь тоже было бы не плохо), есть хендл и имя класса
окна,почему то не могу достать caption, использую GetWindowText//возвращает пустую
строку, вот код:
p.s.:Путь и имя запущеной программы нужны для того что бы, после того как я ее
убью, запустить ее еще раз подгрузив свою DLL

LRESULT CALLBACK CreateWindowHook(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode < 0)
return CallNextHookEx(CurrentHook, nCode, wParam, lParam);

if(nCode == HCBT_CREATEWND)
{
char WindowClass[128];
char WindowCaption[128];
WindowHandle = reinterpret_cast<HWND>(wParam);
GetClassName(WindowHandle, WindowClass, 128);
GetWindowText(WindowHandle, WindowCaption, 128);

...

CHAR szBuf[255]={0};
wsprintf(szBuf, "CreateWindow is hooked: %s", WindowClass);
MessageBox(0, szBuf, "!!!", 0);

}
return CallNextHookEx(CurrentHook, nCode, wParam, lParam);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.