Windows按键突破专家的原理
2007-03-15 21:46:08 来源:WEB开发网核心提示: 大家来看看这个函数,这个函数会将鼠标所在的位置的窗口句柄赋予*phWnd,Windows按键突破专家的原理(2),读者下次想得实现spy++的功能就调用这个函数就可以了,解释一下,HWND s;GetRealWindow(&s);::EnableWindow(s,1);如果只是运行一次这面
大家来看看这个函数,这个函数会将鼠标所在的位置的窗口句柄赋予*phWnd。读者下次想得实现spy++的功能就调用这个函数就可以了。
解释一下,用GetCursorPos得到的鼠标位置,是屏幕的鼠标位置,比如你的分辨率为1024*768,GetCursorPos这个函数得到的就是在1024*768这个屏幕范围的鼠标位置,而客户区窗口坐标,指的是鼠标在一个窗口上的坐标,不同于屏幕坐标。
void GetRealWindow(HWND *phWnd)
{
POINT ptPoint;
HWND hWndTop = NULL;
HWND hWndChild = NULL;
POINT ptCooChild = {0};
// 先得到ptPoint指向的(子)窗口,再通过子窗口得到父窗口的句柄
GetCursorPos(&ptPoint);//得到鼠标的位置
hWndTop = ::WindowFromPoint(ptPoint);//获取鼠标包含指定点的窗口的句柄
ptCooChild = ptPoint;
*phWnd = GetParent(hWndTop); //用来获取最上层的父窗口的句柄
::ScreenToClient(*phWnd, &ptCooChild);//该函数将屏幕的一个坐标转换成客户区(窗口)的坐标
//从最上层的窗口开始外下找,只直到找到最地层的窗口
while (TRUE){
hWndChild = RealChildWindowFromPoint(*phWnd, ptCooChild);
if (hWndChild && (hWndChild != *phWnd))
*phWnd = hWndChild;
else
break;
}
}
代码不是很多,如果看不懂的话,不要紧,懂得调用这个函数就可以啦。
现在要再调用EnableWindow就可以了。
HWND s;
GetRealWindow(&s);
::EnableWindow(s,1);
如果只是运行一次这面的这些语句的话,还是不行的,必须在程序开启突破功能的时候一直运行。
更多精彩
赞助商链接