WEB开发网
开发学院软件开发VC Windows按键突破专家的原理 阅读

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);

如果只是运行一次这面的这些语句的话,还是不行的,必须在程序开启突破功能的时候一直运行。

Tags:Windows 按键 突破

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接