Хочу записывать заголовок создающегося окна в файл. Вот библиотека DLL: Заголовочный файл: | Код | #ifndef _UDLLCREATEWND_H #define _UDLLCREATEWND_H
#ifdef __DLL__ #define DLL_EI __declspec(dllexport) #else #define DLL_EI __declspec(dllimport) #endif
extern "C" bool DLL_EI StartHookCWnd(); extern "C" void DLL_EI RemoveHookCWnd(); #endif
|
Кодовый модуль: | Код | //---------------------------------------------------------------------------
#include <vcl.h> #include <windows.h> #include <stdio.h> #include "UDll.h" #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused HHOOK HCbt=0; int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { if(reason==DLL_PROCESS_DETACH || reason==DLL_THREAD_DETACH) if(HCbt)UnhookWindowsHookEx(HCbt); return 1; } //--------------------------------------------------------------------------- LRESULT CALLBACK CBTProc(int nCode,WPARAM wParam,LPARAM lParam) { if(nCode<0)return CallNextHookEx(HCbt,nCode,wParam,lParam); LPCBT_CREATEWND pcw=(LPCBT_CREATEWND)lParam; if(!pcw->lpcs->hwndParent) { FILE *f=fopen("c:\\hook_create_wnd.log","at"); if(f) { fwrite(pcw->lpcs->lpszName,sizeof(char),strlen(pcw->lpcs->lpszName),f); fclose(f); } } return 0; } //--------------------------------------------------------------------------- bool StartHookCWnd() { if(HCbt)return 1; HCbt=SetWindowsHookExA(HCBT_CREATEWND,(HOOKPROC)CBTProc,HInstance,0); return HCbt; } //--------------------------------------------------------------------------- void RemoveHookCWnd() { if(!HCbt)return; UnhookWindowsHookEx(HCbt); HCbt=0; }
|
Вот модуль программы, которая ставит ловушку. | Код | #include <vcl.h> #include "dll\\UDll.h" #pragma hdrstop
#include "UHCWnd.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::btn1Click(TObject *Sender) { if(btn1->Down) { if(!StartHookCWnd())btn1->Down=0; } else { RemoveHookCWnd(); } }
|
Ловушка ставится, т. к. файл создается, но записей в нем нет.
|