高手看过来,超难问题,高分求解!!!!!分不够,再加~!!! 计算机关机时,系统都会为每个应用程序广播发送WM_QUERYENDSESSION的消息,每个应用程序接到此消息后,都会退出来,我要最先捕获此广播消息,必须经过我的应用程序处理后,其他应用程序才能接收此消息,怎么实现。各位大侠帮帮忙呀。小弟先谢啦!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 下面钩子有什么问题??????extern "C" __declspec(dllexport) BOOL starthook();extern "C" __declspec(dllexport) BOOL stophook();HHOOK glhHook=NULL;//安装的勾子句柄HMODULE hModDLL=NULL;BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved){ hModDLL = (HMODULE)hinstDLL; return 1;}//---------------------------------------------------------------------------LRESULT WINAPI SysMsgProc(int nCode,WPARAM wParam,LPARAM lParam){ MSG *pSysMsg=(MSG *)lParam; if (nCode<0) { return CallNextHookEx(glhHook,nCode,wParam,lParam); } // if(wParam == WM_QUERYENDSESSION) if( pSysMsg->wParam == WM_QUERYENDSESSION||wParam == WM_QUERYENDSESSION) { //添加代码 ::MessageBox(NULL,"消息捕获","钩子",MB_OK); // pSysMsg->wParam=0; // pSysMsg->lParam=0; } return CallNextHookEx(glhHook,nCode,wParam,lParam);//继续传递消息}BOOL starthook(){ //安装钩子 glhHook=SetWindowsHookEx(WH_SYSMSGFILTER,(HOOKPROC) SysMsgProc,hModDLL,0); if(glhHook==NULL) return -1; return 0;}BOOL stophook(){ //卸载钩子 BOOL bResult=FALSE; if(glhHook) bResult= UnhookWindowsHookEx(glhHook); return bResult;} 你的程序不也会接收到WM_QUERYENDSESSION吗。这种想法能实现吗? 我也顺便问个问题,是不是捕捉鼠标位置即使是写在DLL里的也必须使用钩子?在DLL中只用ONMOUSEMOVE不行的吗? 钩子分为两种,一种是全局系统钩子,一种是局部的。如果想要在你的APP中影响其他的应用,必须使用全局系统钩子,就必须放在DLL中动态加载。反之,钩子只在你的APP中使用,hook function就直接写在你的app中好了。 [email protected]也给我一份可以吗/ [email protected]也给我一份,先谢谢 谢谢,最好我也来一份[email protected] vc中如何弹出对话框,用来实现数据的输入. 请教大家一个有关ole拖放方面得问题(很急) 求助多边形拆分 求救 vs2005 mscomm控件的问题? 怎样利用cpp和h文件把工程给复原? 多文档程序初始化时显示多幅视图 可能是很难的问题, 如何判断一段字符串是否为UTF-8编码的? 关于串口控件通讯的问题 求助!!!急啊!!! 初学者如何写程序 点对话框右上的X会发送什么消息? 大侠要培养新手阿,一个小问题。。。
extern "C" __declspec(dllexport) BOOL starthook();
extern "C" __declspec(dllexport) BOOL stophook();
HHOOK glhHook=NULL;//安装的勾子句柄
HMODULE hModDLL=NULL;BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
hModDLL = (HMODULE)hinstDLL;
return 1;
}
//---------------------------------------------------------------------------
LRESULT WINAPI SysMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
{
MSG *pSysMsg=(MSG *)lParam;
if (nCode<0)
{
return CallNextHookEx(glhHook,nCode,wParam,lParam);
}
// if(wParam == WM_QUERYENDSESSION)
if( pSysMsg->wParam == WM_QUERYENDSESSION||wParam == WM_QUERYENDSESSION)
{
//添加代码
::MessageBox(NULL,"消息捕获","钩子",MB_OK);
// pSysMsg->wParam=0;
// pSysMsg->lParam=0;
}
return CallNextHookEx(glhHook,nCode,wParam,lParam);//继续传递消息
}BOOL starthook()
{
//安装钩子
glhHook=SetWindowsHookEx(WH_SYSMSGFILTER,(HOOKPROC) SysMsgProc,hModDLL,0);
if(glhHook==NULL)
return -1;
return 0;
}BOOL stophook()
{
//卸载钩子
BOOL bResult=FALSE;
if(glhHook)
bResult= UnhookWindowsHookEx(glhHook);
return bResult;
}
是不是捕捉鼠标位置即使是写在DLL里的也必须使用钩子?
在DLL中只用ONMOUSEMOVE不行的吗?
如果想要在你的APP中影响其他的应用,必须使用全局系统钩子,就必须放在DLL中动态加载。
反之,钩子只在你的APP中使用,hook function就直接写在你的app中好了。
也给我一份,先谢谢
[email protected]