我用钩子钩住了所有static控件并把他们子类化,但是退出程序时怎麽恢复他们呀?请看代码
钩子函数:
{
if (code == HC_ACTION)
{
switch (((CWPSTRUCT*) lParam)->message)
{
case WM_CREATE:
BeginSubclassing(((CWPSTRUCT*) lParam)->hwnd);
break;
case WM_NCDESTROY:
// TODO: clear subclass info.
EndSubclassing(((CWPSTRUCT*) lParam)->hwnd);
break;
default:
break;
}
}
}
void BeginSubclassing(HWND wnd)
{
TCHAR strClassName[10];
int Count = 10;
::GetClassName(wnd,strClassName,Count);
if(_tcscmp(strClassName, "Static") == 0)
{
CMyStatic *pStatic=new CMyStatic;
VERIFY(pStatic ->SubclassWindow(wnd));
// ::UnhookWindowsHookEx(g_hWndProcHook);
}
}
void EndSubclassing(HWND wnd)
{
TCHAR strClassName[10];
int Count = 10;
::GetClassName(wnd,strClassName,Count);
if(_tcscmp(strClassName, "Static") == 0)
{
/*CWnd *pStatic=(CWnd*)wnd ;
pStatic->UnsubclassWindow();
delete pStatic;*/ 这块怎麽写??
}
}
{
if (code == HC_ACTION)
{
switch (((CWPSTRUCT*) lParam)->message)
{
case WM_CREATE:
BeginSubclassing(((CWPSTRUCT*) lParam)->hwnd);
break;
case WM_NCDESTROY:
// TODO: clear subclass info.
EndSubclassing(((CWPSTRUCT*) lParam)->hwnd);
break;
default:
break;
}
}
}
void BeginSubclassing(HWND wnd)
{
TCHAR strClassName[10];
int Count = 10;
::GetClassName(wnd,strClassName,Count);
if(_tcscmp(strClassName, "Static") == 0)
{
CMyStatic *pStatic=new CMyStatic;
VERIFY(pStatic ->SubclassWindow(wnd));
// ::UnhookWindowsHookEx(g_hWndProcHook);
}
}
void EndSubclassing(HWND wnd)
{
TCHAR strClassName[10];
int Count = 10;
::GetClassName(wnd,strClassName,Count);
if(_tcscmp(strClassName, "Static") == 0)
{
/*CWnd *pStatic=(CWnd*)wnd ;
pStatic->UnsubclassWindow();
delete pStatic;*/ 这块怎麽写??
}
}
...全文
相关推荐
钩住SSDT以及隐藏进程的代码HideProcessHookMDL
**IAT钩子**:钩住导出表(Import Address Table),使得调用系统服务时,实际调用的是钩子函数。4.
rootkit钩住SSDT隐藏进程
一旦成功,每当有系统服务被调用时,rootkit的代码就会先于原函数执行,从而可以隐藏自身或其他恶意进程,防止被安全软件检测到。这种技术被称为“SSDT钩子”。**4.
学习笔记之钩住驱动程序导入表
在示例代码中,`MyRoutine`函数被设计为钩子函数,当驱动程序试图调用`PsGetCurrentProcessId`时,会触发这个函数,打印当前进程的ID。
VC++ API钩子 附含源代码
源代码分析可能是这样的:首先,开发者会导入detoured.dll并声明相应的API接口。然后,他们会定义一个钩子函数,该函数会在目标API被调用时执行。
钩子ApiHook教程示例代码.zip
**动态链接库(DLL)钩子**:通过替换API函数的地址,使得调用时首先执行自定义代码,然后再跳转到原始函数。这种方法也称为API钩子,是本示例代码可能采用的方式。


