小弟初用WH_CALLWNDPROC钩子,结果程序一运行电脑直接死机、、很是钩子函数子程如下求解答
最好能给小弟Email一个写好的例子供小弟学习,小弟再次现行谢过。
HOOKPROC CallProc(int iCode,WPARAM wParam, LPARAM lParam)
{
if (iCode == HC_ACTION)
{
CWPSTRUCT *msg = (CWPSTRUCT *)lParam;
char MessageStr[10];
switch(msg->message)
{
case WM_CREATE: {strcpy(MessageStr,"WM_CREATE"); break;}
case WM_DESTROY : {strcpy(MessageStr,"WM_DESTROY"); break;}
case WM_MOVE: {strcpy(MessageStr,"WM_MOVE"); break;}
case WM_SIZE: {strcpy(MessageStr,"WM_SIZE "); break;}
case WM_ACTIVATE: {strcpy(MessageStr,"WM_ACTIVATE"); break;}
case WM_SETFOCUS: {strcpy(MessageStr,"WM_SETFOCUS"); break;}
case WM_KILLFOCUS: {strcpy(MessageStr,"WM_KILLFOCUS"); break;}
case WM_ENABLE: {strcpy(MessageStr,"WM_ENABLE"); break;}
case WM_SETREDRAW: {strcpy(MessageStr,"WM_SETREDRAW"); break;}
case WM_SETTEXT: {strcpy(MessageStr,"WM_SETTEXT"); break;}
case WM_GETTEXT: {strcpy(MessageStr,"WM_GETTEXT"); break;}
case WM_GETTEXTLENGTH: {strcpy(MessageStr,"WM_GETTEXTLENGTH"); break;}
case WM_PAINT: {strcpy(MessageStr,"WM_PAINT"); break;}
case WM_CLOSE: {strcpy(MessageStr,"WM_CLOSE"); break;}
case WM_QUERYENDSESSION: {strcpy(MessageStr,"WM_QUERYENDSESSION"); break;}
case WM_QUIT: {strcpy(MessageStr,"WM_QUIT"); break;}
case WM_QUERYOPEN: {strcpy(MessageStr,"WM_QUERYOPEN"); break;}
case WM_ERASEBKGND: {strcpy(MessageStr,"WM_ERASEBKGND"); break;}
case WM_SYSCOLORCHANGE: {strcpy(MessageStr,"WM_SYSCOLORCHANGE"); break;}
case WM_ENDSESSION: {strcpy(MessageStr,"WM_ENDSESSION"); break;}
default: {strcpy(MessageStr,"WM_USER"); break;}
}
char szTitle[256];//当前窗口名称
char szTime[128];//保存当前的日期时间
FILE *stream = fopen("c:\\logfile.txt","a+t");
HWND hFous = msg->hwnd;
GetWindowText(hFous,szTitle,256);
time_t t = time( 0 ); 
strftime(szTime,sizeof(szTime),"%Y/%m/%d %X %A",localtime(&t));
fprintf(stream,"%c%s%c%c%s%c%c%s",10,szTime,32,32,szTitle,32,32,MessageStr);//写入文件 
fprintf(stream,"%c%c",32,32);
}
return (HOOKPROC) CallNextHookEx(glHook,iCode,wParam,lParam);
}