应该是使用WH_CALLWNDPROC类型钩子截取消息。但是我好像很难做成全局钩子。
解决方案 »
- CreateWindow失败,
- 什么时候用\r 什么时候用\n 以及什么时候用\r\n呢?
- 请问如何判断电脑现在已经进入了屏幕保护状态?
- ado连接数据库后插入记录后出现runtime error
- 怎么得到图象的数据数组? 那位大虾会!
- 如何在一台机器上调试一个CS网络程序
- 请问如何让菜单和工具栏的按钮变灰?
- 那重点该注意VC里面的什么东西了?
- 在opencv中跟踪选定了目标后为什么要进行坐标变换
- [MFC错误求教】
- 百思不得其解的问题?
- 在子线程中能否将一个 VARIANT* 作为参数传给接口函数(真正用 MFC with Automation and Multithread 做过程序的人请进)
到裡面下載一個VNC的源程序.裡面有個VNCHook程序..那個就是.應該有別的更好的地址.我只是方便給你貼一下.
#pragma data_seg("PublicData") //定义全局数据段
HHOOK hhook=NULL; //钩子句柄
HINSTANCE pInstance=NULL; //钩子模块句柄,必须要初始化
#pragma data_seg()
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif#pragma data_seg("data")
HHOOK g_hCallWndHook=NULL;
HINSTANCE g_hInst=NULL;
#pragma data_seg()
#pragma comment(linker, "/section:data,rws")extern "C" __declspec(dllexport) BOOL StartHook();
extern "C" __declspec(dllexport) BOOL Endhook();
LRESULT WINAPI CallWndProc(int nCode, WPARAM wParam, LPARAM lParam);extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved); g_hInst = hInstance; if (dwReason == DLL_PROCESS_ATTACH)
{
if (!AfxInitExtensionModule(CaptureDLL, hInstance))
return 0;
new CDynLinkLibrary(CaptureDLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
AfxTermExtensionModule(CaptureDLL);
}
return 1;
}BOOL StartHook()
{
if (g_hCallWndHook)
{
return FALSE;
}
else
{
g_hCallWndHook = SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc,g_hInst,0);
return TRUE;
}
}BOOL Endhook()
{
if (g_hCallWndHook)
{
UnhookWindowsHookEx(g_hCallWndHook);
g_hCallWndHook=NULL;
return TRUE;
}
else
{
return FALSE;
}
}LRESULT WINAPI CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0 || nCode == HC_NOREMOVE)
return CallNextHookEx(g_hCallWndHook,nCode,wParam,lParam); if( ((LPCWPSTRUCT)lParam)->message == WM_CLOSE)
{
MessageBeep(0);
} return CallNextHookEx(g_hCallWndHook,nCode,wParam,lParam);
}