我需要知道窗口的阴影尺寸。我尝试通过GetSystemMetrics WinAPI函数接收值,但我找不到要传递的参数。关于如何全局(或单个窗口句柄)获取此值的任何想法?我知道投影的宽度取决于窗口类型(对话框/正常/等)。我会用C#实现这个功能,但C ++也没关系。
有一种方法可以使用DWM API来计算投影的大小,但是,在窗口可见之前它不起作用。
在以前的Windows版本中,有Client Rect和Window Rect。但是自Vista问世以来,已经有一个名为Extended Frame Bounds的窗口的第三个Rect。第三个rect大于Client Rect并且小于Window Rect,并且不包括投影所占用的区域。
调用DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &rect, sizeof(RECT))
读取扩展帧边界rect。此功能来自<dwmapi.h>
,在Windows XP或更早版本中不可用。
请注意,如果在显示窗口之前调用此方法,则会得到不正确的结果。
编辑:
请注意,扩展帧边界是物理像素坐标,不受Windows的缩放功能的影响。您可能需要转换回虚拟坐标,或将虚拟坐标转换为物理坐标以使它们匹配。
据我所知,没有办法获得这些信息。诸如WindowClippings之类的程序通过截取屏幕并在之后裁剪为阴影尺寸来解决它。