如何利用hook捕获桌面上窗口最小化消息 rt 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 setwindowshookex();网上有代码,稍微改改就是行了 我在dll里这样写的extern "C" _declspec(dllexport) void SetHook(){ if(g_hMessage != NULL) { UnhookWindowsHookEx(g_hMouse); } g_hMessage = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc,g_hstance,0);}LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam){ /*if(nCode < 0 ) return ::CallNextHookEx(g_hMouse, nCode, wParam, lParam); */ MSG *lptemp =(MSG *)lParam; if(lptemp->message == WM_SYSCOMMAND /*&& lptemp->wParam == SC_MINIMIZE*/) SendMessage(hwnd,WM_SCREEN_LBUTTONDOWN,0,0); return 0;}为什么捕获不到WM_SYSCOMMAND消息呢? 据msdn, WH_GETMESSAGE 只能 hook procedure that monitors messages posted to a message queue,也就是PostMessage,你用WH_CBT看看,就该可以的,LRESULT CALLBACK CBTProc( int nCode, WPARAM wParam, LPARAM lParam){ if (HCBT_MINMAX == nCode && SW_MINIMIZE == LOWORD(lParam)) //最小化 有关窗口创建激活最大化最小化等 应该用 WH_CBT钩子 把setwindowshook代码写入dll,把最后一个参数设为0,全局hook 问题解决了对于其它进程的消息,CBTProc函数是在相应的进程中被调用的,在你调试程序的时候,你所调试的只是自己的进程,当其它进程中调用CBTProc函数时调试器不会察觉,所以使你误以为收不到其它进程的消息。你可以在CBTProc函数中通过写日志文件的方式来记录消息,注意:文件句柄是只在本进程内有效的,每次写文件都要执行打开和关闭文件操作,不能通过全局变量(包括共享变量)保存句柄。 更改对话框的圆角形状!//为什么没出来?只出来俩个圆角呢 xpsp1 ddk,DirverStudio3.2,xp系统,如何配置环境问题 关于怎样销毁定时器的问题? 好难啊!!!请问各位VC能不能接受VB的自定义事件? 紧急求救,VC中CDMA猫收不到返回信息的问题?超级终端能收到! 求IP地址算法, 怎么判断在文件尾? 简单问题,高分送 讲座:“控制一切联网电脑”- 前沿木马编程技术讨论(一)(涉及:木马编程、Winsock通迅、HTTP隧道技术等) ADO 连接数据库失败时,弹出错误对话框。有图 加载自定义光标的问题 求助:视类中用鼠标画线 为什么两个端点的Y坐标和X坐标差值都大于0?
{
if(g_hMessage != NULL)
{
UnhookWindowsHookEx(g_hMouse);
}
g_hMessage = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc,g_hstance,0);
}LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
/*if(nCode < 0 )
return ::CallNextHookEx(g_hMouse, nCode, wParam, lParam); */ MSG *lptemp =(MSG *)lParam;
if(lptemp->message == WM_SYSCOMMAND /*&& lptemp->wParam == SC_MINIMIZE*/)
SendMessage(hwnd,WM_SCREEN_LBUTTONDOWN,0,0); return 0;
}
为什么捕获不到WM_SYSCOMMAND消息呢?
LRESULT CALLBACK CBTProc( int nCode,
WPARAM wParam,
LPARAM lParam
)
{
if (HCBT_MINMAX == nCode && SW_MINIMIZE == LOWORD(lParam)) //最小化
把setwindowshook代码写入dll,把最后一个参数设为0,全局hook