[疑难] 如何编写一个Hook应用
ccj
2010-04-24
目前在学习用D做一个Hook,以前用Delphi写过,可D不知道怎么入手,特别是需要导入哪些库,网上也找不到一个代码示例,dsource上有一个Kong项目是一个Hook Api lib,但编译不了,结构又比较复杂,不知道有没有高手提供一个Hook的实例代码。
|
|
betty_betty2008
2010-04-24
ccj 写道 目前在学习用D做一个Hook,以前用Delphi写过,可D不知道怎么入手,特别是需要导入哪些库,网上也找不到一个代码示例,dsource上有一个Kong项目是一个Hook Api lib,但编译不了,结构又比较复杂,不知道有没有高手提供一个Hook的实例代码。
不太明楼主所讲的HOOK 应用是什么意思,俺练习过一个MessageBoxEx,D2版的,是不是这个太小儿科了,文不对题的话,就请忽略~~ module msgboxEx; import win32.windows; HHOOK hMsgBoxHook; extern(Windows) LRESULT CBTProc(int nCode,WPARAM wParam,LPARAM lParam) { HWND hwnd; HWND hwndButton; if(nCode<0) return CallNextHookEx(hMsgBoxHook,nCode,wParam,lParam); switch(nCode) { case HCBT_ACTIVATE: hwnd=cast(HWND)wParam; hwndButton=GetDlgItem(hwnd,IDOK); SetWindowTextW(hwndButton,"Thank you"); return 0; default: break; } return CallNextHookEx(hMsgBoxHook,nCode,wParam,lParam); } extern(Windows) int MsgBoxEx(HWND hwnd,in wstring szText,in wstring szCaption,UINT uType) { int retval; hMsgBoxHook=SetWindowsHookEx( WH_CBT, &CBTProc, null, GetCurrentThreadId() ); retval=MessageBoxW(hwnd,(szText~"\000").ptr, (szCaption~"\000").ptr,uType); UnhookWindowsHookEx(hMsgBoxHook); return retval; } module msgboxExTest; import msgboxEx; import win32.windows; import core.runtime; static wstring szContents="Windows will now wipe your harddisk!" "\n系统马上格式化硬盘"; static wstring szMsgCaption="Message from Bill哈密瓜"; extern(Windows) int WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lpCmdLine,int nShowCmd) { Runtime.initialize; runModuleUnitTests; MsgBoxEx(null,szContents,szMsgCaption,MB_OK|MB_ICONSTOP); Runtime.terminate; return 0; } |
|
hqs7636
2010-04-25
winapi玩得不错了啊
我要能玩熟phobos就够了 |