LRESULT CALLBACK fnHookWindowProc(HWND
hwnd,UINT msg,WPARAM wparam, LPARAM lparam);
int __declspec(dllexport) WINAPI fnAttachWinProc(HWND ni_hAttatchWin,PVOID
,PVOID,PVOID);
int __declspec(dllexport) WINAPI fnDetachWinMsgProc(HWND
ni_hDetachWin);
WNDPROC tpOldWindowProc;
FILE *m_pDebugOutputFile;
//将一个窗体消息处理挂接到net精简版MessageWindow对象上的代码
typedef struct
{
WNDPROC OldWinProc;//保留窗体原始消息处理过程的函数指针
HWND WindowHandle;//保存net精简版中对应的窗口挂接的MessageWindow对象的句柄
} DEFUDT_AttachWinInfo; //end struct
CMap<HWND,HWND,DEFUDT_AttachWinInfo,DEFUDT_AttachWinInfo>
m_aAttachWinInfoMap;
//对指定的窗口进程进行挂接
int __declspec(dllexport) WINAPI fnAttachWinProc(HWND ni_hAttatchWin,
PVOID ni_0,
PVOID ni_1,
PVOID ni_2 )
{
DEFUDT_AttachWinInfo tudtAttachWinInfo;
m_pDebugOutputFile = fopen("\\Storage Card\\WinProcInfo.txt",
"w");
WNDPROC tpOldWindowProc=(WNDPROC)::SetWindowLong(ni_hAttatchWin,
GWL_WNDPROC,(LONG) fnHookWindowProc );
fprintf(m_pDebugOutputFile,"Attatch successfully! OldWindowProc:
%08X\n",tpOldWindowProc);
tudtAttachWinInfo.OldWinProc=tpOldWindowProc ;
tudtAttachWinInfo.WindowHandle=ni_hAttatchWin;
m_aAttachWinInfoMap.SetAt(ni_hAttatchWin,tudtAttachWinInfo);
fclose(m_pDebugOutputFile);
return 77;// (int)tpOldWindowProc ;
}//end function
int __declspec(dllexport) WINAPI fnDetachWinMsgProc(HWND
ni_hDetachWin)
{
DEFUDT_AttachWinInfo tudtAttachWinInfo;
WNDPROC tpOldWindowProc;
//取得在ncf中消息接收窗口对应的原始消息处理函数的函数指针
m_aAttachWinInfoMap.Lookup(ni_hDetachWin,tudtAttachWinInfo)
;
//将窗体的消息处理函数设为默认的处理过程
tpOldWindowProc =(WNDPROC) SetWindowLong(ni_hDetachWin,GWL_WNDPROC
, (LONG)tudtAttachWinInfo.OldWinProc);
//将挂接信息消息处理映谢类中删除
m_aAttachWinInfoMap.RemoveKey(ni_hDetachWin);
return (int)tpOldWindowProc ;
}//end function
LRESULT CALLBACK fnHookWindowProc(HWND hwnd,UINT msg,WPARAM
wparam, LPARAM lparam)
{
DEFUDT_AttachWinInfo tudtAttachWinInfo;
m_aAttachWinInfoMap.Lookup(hwnd,tudtAttachWinInfo) ;
m_pDebugOutputFile = fopen("\\Storage Card\\WinProcInfo.txt",
"a");
if (m_pDebugOutputFile!=NULL)
{
fprintf(m_pDebugOutputFile,"HWND: %08X Msg: %08X Wparam
%08X Lparam %08X \n",
hwnd,msg,wparam,lparam);
}//EHD IF
fclose(m_pDebugOutputFile);
//tudtAttachWin=maatt
LRESULT tobjResult= ::CallWindowProc(tudtAttachWinInfo.OldWinProc
,hwnd,msg,wparam,lparam);
return tobjResult;
}//end function
|