应用代码如下:(调DLL) //---------------------------------------------------------------------------------------------------- static HINSTANCE hDLL; // DLL句柄 typedef void __stdcall (*DLLFUN)(HWND,bool); DLLFUN DLLSetHook; static const myMessage=2000; static const SecondPar=1; //---------------------------------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner) {} //---------------------------------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { hDLL=LoadLibrary((LPCTSTR)"Project1.dll"); // DLL文件名:Project1.dll if(hDLL==NULL) { ShowMessage("DLL: 不能加载!程序退出。"); exit(1); } DLLSetHook =(DLLFUN)GetProcAddress(hDLL,"SetHook"); if(DLLSetHook==NULL) { ShowMessage("DLL: 函数没找到!程序退出。"); FreeLibrary(hDLL); exit(1); } DLLSetHook(this->Handle,true); } //---------------------------------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { DLLSetHook(NULL,false); // 卸下HOOK FreeLibrary(hDLL); // 卸下DLL } //---------------------------------------------------------------------------------------------------- void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,bool &Handled) { // BCB5.0 的ApplicationEvents元件 if((Msg.message==myMessage)&&(Msg.lParam==SecondPar)) ShowMessage(" 收到HOOK按键消息!\n\n 【键虚拟码】:"+IntToStr(Msg.wParam)); } //----------------------------------------------------------------------------------------------------
用 WH_JOURNALRECORD 类型HOOK可简单实现. 
|