找到点下面的所有窗口
我想找到桌面上给定点下面的所有顶级窗口(桌面的孩子).我找不到这个API.
我的情况是我在屏幕上拖动一个窗口,并希望将其放入另一个(已知)窗口.我可以测试目标窗口的边界确定,但这并不能告诉我它是否被另一个(未知)窗口遮挡.使用WindowFromPoint和朋友将无法工作,因为被拖动的窗口必须直接在鼠标下.所以我想知道我是否可以在鼠标位置获取所有窗口,并查看它们以查看我正在跟踪的其中一个窗口是否正在我正在拖动的窗口下方. 有没有办法在每次鼠标拖动时不依靠EnumDesktopWindows / GetWindowRect来做到这一点?或许还有另一种我不知道的解决方案.
如果你善意地询问,WindowFromPoint将忽略你的窗口(当前被拖动的窗口)并返回下一个窗口.这是Internet Explorer在拖动选项卡时执行的操作.
要做到这一点: >在拖动的窗口中处理WM_NCHITTEST 故障排除(如果您仍然从WindowFromPoint获取窗口) >测试GetCurrentThreadID()== GetWindowThreadProcessId(WindowFromPoint(),0)以确保从正确的线程调用 示例(矩形内的区域从WindowFromPoint返回基础窗口): LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { static const RECT s_TransparentRect = {100,100,200,200}; switch (message) { case WM_NCCREATE: SetTimer(hWnd,1,0); break; case WM_TIMER: { POINT cursorPos; GetCursorPos(&cursorPos); TCHAR buffer[256]; _snwprintf_s(buffer,_countof(buffer),_TRUNCATE,_T("WindowFromPoint: %08Xn"),(int)WindowFromPoint(cursorPos)); SetWindowText(hWnd,buffer); } break; case WM_PAINT: { PAINTSTRUCT ps; BeginPaint(hWnd,&ps); Rectangle(ps.hdc,s_TransparentRect.left,s_TransparentRect.top,s_TransparentRect.right,s_TransparentRect.bottom); EndPaint(hWnd,&ps); } break; case WM_NCHITTEST: { POINT cursorPos; GetCursorPos(&cursorPos); MapWindowPoints(HWND_DESKTOP,hWnd,&cursorPos,1); if (PtInRect(&s_TransparentRect,cursorPos)) return HTTRANSPARENT; } break; } return DefWindowProc(hWnd,message,wParam,lParam); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- powershell – Vista上的WMF 4.0和DSC?任何机会?
- windows – 128GB RAM的页面错误
- windows-server-2008 – Windows的LogRotate的等价物?
- string – OleVariant可用于DLL proc中的out参数吗?
- active-directory – Active Directory复制目标主体名称不正
- 复制最新/最新文件夹窗口的内容
- windows-server-2008 – 在Windows Server 2008 R2上查看计
- Windows server 2012 r2对计算机的网络速度限制在~30mbps
- crowdstrike提供的应急响应工具
- winapi – 如何使用win32在D中创建Windows?
- Windows Server Backup 2012中“Hyper-V”与分区
- Windows – Haskell – GHC中的问题编译
- .NET 4.5中的microsoft.identityModel和system.i
- windows安装MongoDB副本集,通过Java程序实现数据
- 在Windows上的python twisted stdio示例不起作用
- windows批量删除当前目录以及子目录的所有空文件
- 如何使用命令行界面管理远程Windows Server?
- 是否可以开发Windows,C,没有Visual Studio?
- Windows Phone 7 – WP7应用程序版本
- 在MS Windows下获取Android Vulkan示例