[疑难] 如何编写一个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就够了
Global site tag (gtag.js) - Google Analytics