间谍行动——窗体探测器
最近心血来潮,对spy深感兴趣,便准备进行一次间谍行动,目标很简单,利用EnableWindow函数激活不可用或无效的控件按钮,当然,这窗体探测器是必不可少了,原以为很简单,但实际行动起来,却遇到不少麻烦,现将经过记录下来,供有兴趣的朋友参考。
我们大都见过spyxx中的窗体探测器,当鼠标在窗体探测器上按下左键时,更改鼠标样式,同时捕获鼠标,探测鼠标下的窗体直到鼠标左键松开。这样我们可以写出代码框架了:
case WM_LBUTTONDOWN://鼠标左键按下,检测拖动还是探测 { MSG msg; //在窗体探测器中按下鼠标 if(在窗体探测器内==TRUE)//替换光标,探测拖动 { //更改鼠标样式 SetCursor(...); //捕获鼠标 SetCapture(hWnd); hWndNow=NULL;//当前窗体设为空//此为全局变量 //获取鼠标移动消息 while(GetMessage(&msg,NULL,WM_MOUSEFIRST,WM_MOUSELAST)) { if((msg.message==WM_MOUSEMOVE)||(msg.message==WM_NCMOUSEMOVE)) { HWND hWndPoint; //设置光标 SetCursor(LoadCursor(hInst, (LPCTSTR)CUR_WINDOWSPY)); GetCursorPos(&Point); //探测当前鼠标点 if(hWndPoint=WindowFromPoint(Point)) { if(hWndNow!=hWndPoint)//目标已改变 { if(hWndNow) { //清除旧目标上的黑框 XorBorder(hWndNow); } //并且不属于本线程 if(GetWindowThreadProcessId(hWndPo