一个Mouse钩子的DLL问题-》麻烦各位解释一下每句的意思,看不太明白《-问题解释就结贴
下面是一段处理Mouse的代码,但在头文件中并没有声明,在一个DLL中不是要一个入口主函数(DLLMain)就行吗?在什么情况下会调用以下函数呀???
extern "C" _declspec(dllexport) LRESULT WINAPI MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(nCode>=0)
{
if(wParam==WM_LBUTTONDOWN)
Condition1=1;
if(wParam==WM_LBUTTONUP)
Condition1=0;
if(wParam==WM_RBUTTONDOWN)
Condition2=1;
if(wParam==WM_RBUTTONUP)
Condition2=0;
if(Condition1 & Condition2)
{
Condition1=Condition2=0;
HideOrVisitableFlag=!HideOrVisitableFlag;
if(HideOrVisitableFlag)
{
::EnumWindows(CMousehook::EnumWindowsProc,NULL);
}
if(!HideOrVisitableFlag)
while(Global_i>0)
{
Global_i--;
::ShowWindow(GlobalWndHandle[Global_i],SW_SHOW);
}
}
return CallNextHookEx(glhHook,nCode,wParam,lParam);
}
return CallNextHookEx(glhHook,nCode,wParam,lParam);
中外还定义了一个系统回调的钩子函数(如下),它们的调用顺序是怎么样的???
BOOL CMousehook::EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
char buff[256];
if(Check1==0)
{
::GetWindowText(hwnd,buff,255);
if(!lstrcmp(buff,"Program Manager"))
return 1;
}
if(Check2==0)
{
::GetClassName(hwnd,buff,255);
if(!lstrcmp(buff,"Shell_TrayWnd"))
return 1;
}
if(GetWindowLong(hwnd,GWL_STYLE) & WS_VISIBLE)
{
if(Check3)
{
::GetWindowText(hwnd,buff,255);
if(!lstrcmp(buff,"魔高一丈"))
return 1;
::ShowWindow(hwnd,SW_HIDE);
::SendMessage(hwnd,WM_CLOSE,0,0);
//::SendMessage(hwnd,WM_DESTROY,0,0);
//::SendMessage(hwnd,WM_NCDESTROY,0,0);
return 1;
}
GlobalWndHandle[Global_i]=hwnd;
Global_i++;
ShowWindow(hwnd,SW_HIDE);
}
return 1;
}
}
我学VC时间不长,是不是问的有点离谱?不要见笑哟!!