同题.
解决方案 »
- MFC监控一个edit control的变化
- 从另外一台电脑上 拷贝了程序 出现如下问题,如何解决?
- MFC要为习多久才能入门呢?
- [儿子终于出世了,散分给各位!]
- 请教CDateTimeCtrl控件使用
- 关于 FLASH 文件关联
- 数据库工程从vc6升级到vc2008的问题
- ShellExecute和WinExec和LoadLibrary 分别是哪几个DLL里的函数???????
- DrawText截断显示,如何获取显示了多少汉字?
- 如何在视图(View)中显示一个插入标记(Caret),高分!!!!
- 如何让我的程序停止一段时间,然后再干活
- 很简单40分:怎样设置View的背景颜色?如果我想设置指定的颜色,怎样查到对应这种颜色的颜色码呢?
看看MSDN我想就可以了!
//#include "stdafx.h"
#include <afxdllx.h>
#include "MouseHook.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif#pragma data_seg("mydata")
HINSTANCE glhInstance=NULL;
HHOOK glhHook=NULL;
HWND GlobalWndHandle[100]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
UINT Global_i=0;
BOOL Condition1=0;
BOOL Condition2=0;
BOOL HideOrVisitableFlag=0;
BOOL Check1=0;
BOOL Check2=0;
BOOL Check3=0;#pragma data_seg() #define DLLEXPORT _declspec(dllexport)
extern "C" DLLEXPORT LRESULT WINAPI MouseProc(int nCode,WPARAM wParam,LPARAM lParam);static AFX_EXTENSION_MODULE MouseHookDLL = { NULL, NULL };extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved); if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("MOUSEHOOK.DLL Initializing!\n");
// Extension DLL one-time initialization
if (!AfxInitExtensionModule(MouseHookDLL, hInstance))
return 0; new CDynLinkLibrary(MouseHookDLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("MOUSEHOOK.DLL Terminating!\n");
// Terminate the library before destructors are called
AfxTermExtensionModule(MouseHookDLL);
}
glhInstance=hInstance;
return 1;
}
CMousehook::CMousehook()
{ }
CMousehook::~CMousehook()
{
stophook();
}BOOL CMousehook::starthook()
{
BOOL bResult=false;
glhHook=::SetWindowsHookEx(WH_MOUSE,MouseProc,glhInstance,0);
if(glhHook!=NULL)
bResult=true; return bResult;
}BOOL CMousehook::stophook()
{
BOOL bResult=FALSE;
if(glhHook)
{
{
bResult=UnhookWindowsHookEx(glhHook);
if(bResult)
{
glhHook=NULL;
}
}
}return bResult;
}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;
}
VOID CMousehook::SetCheck1(UINT i)
{
Check1=i;
}VOID CMousehook::SetCheck2(UINT i)
{
Check2=i;
}VOID CMousehook::SetCheck3(UINT i)
{
Check3=i;
}VOID CMousehook::UseForExit()
{
while(Global_i>0)
{
Global_i--;
::ShowWindow(GlobalWndHandle[Global_i],SW_SHOW);
}
}/*
HHOOK SetWindowsHookEx( int idHook, HOOK_PROC lpfn, HINSTANCE hMod,DWORD dwThreadID);参数说明:
idHook :钩子的类型lpfn :钩子处理函数地址hMod :包含钩子函数的模块句柄dwThreadID :钩子的监控线程函数说明:函数将在系统中挂上一个由idHook指定类型的钩子,监控并处理相应的特定消息。BOOL UnhookWindowsHookEx( HHOOK hhk );
函数说明:函数将撤销由hhk指定的钩子。
LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam,LPARAM lParam );
函数说明:函数将消息向下传递,下一个钩子处理将截获这一消息。
*/