Хотелось бы поддержать товарища <Аноним> в его желаниях:
А> По этому поводу есть еще пара вопросов, подскажите кто знает... А>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); А>}
Но лучше было бы получить строку запуска т. к. EXE может быть WORD, EXCEL и ....., а нужен сам файл.