issues
search
Blinue
/
Magpie
An all-purpose window upscaler for Windows 10/11.
GNU General Public License v3.0
9.66k
stars
496
forks
source link
优化对透明窗口的检测
#917
Closed
Blinue
closed
6 months ago
Blinue
commented
6 months ago
确定一个窗口是否对鼠标透明需要考虑数个因素:
窗口可见
鼠标位于窗口内
窗口没有被
冻结
窗口没有 WS_EX_TRANSPARENT 样式
如果窗口是分层窗口,使用 ChildWindowFromPointEx 判断该点是否透明,似乎没有公开的 API 能检测分层窗口是否透明
如果窗口使用 SetWindowRgn 自定义形状,使用 PtInRegion 判断该点是否透明
注意事项:
无需考虑 HTTRANSPARENT,它只能作用于子窗口
ChildWindowFromPointEx 也会考虑自定义形状,但只适用于客户区。因此如果鼠标位于客户区,仅使用 ChildWindowFromPointEx 即可;反之如果窗口位于非客户区,则只需考虑自定义形状,因为分层窗口不允许非客户区透明。
如果窗口的 IL 比 Magpie 高,ChildWindowFromPointEx 会失败,因此无法检测分层窗口是否透明。
确定一个窗口是否对鼠标透明需要考虑数个因素:
注意事项: