C++ lanrenAPI::setWindowsMousePenetrate 函数疑难解答 - 鼠标穿透功能失效
C++ lanrenAPI::setWindowsMousePenetrate 函数疑难解答 - 鼠标穿透功能失效
本文分析了 lanrenAPI::setWindowsMousePenetrate 函数实现 Windows 鼠标穿透功能的代码,并探讨了该函数失效的常见原因,包括参数错误、程序执行顺序问题等,并提供排查思路和解决方案。
代码分析
bool lanrenAPI::setWindowsMousePenetrate(HWND hwnd, bool setPenetrate) {
bool ret;
if (setPenetrate) {
int a = GetWindowLongA(hwnd, GWL_EXSTYLE);
a = a | 32 | 524288;
ret = SetWindowLongA(hwnd, GWL_EXSTYLE, a);
} else {
ret = SetWindowLongA(hwnd, GWL_EXSTYLE, 524288);
}
return ret;
}
从代码本身来看,没有明显的错误。可能是其他因素导致没有反应,例如传入的参数不正确,或者程序执行顺序有问题等等。
排查思路
- 检查参数:确保传入的
hwnd参数是有效的窗口句柄,并且setPenetrate参数的值是true或false。 - 检查程序执行顺序:确认调用
setWindowsMousePenetrate函数的时机是否正确,以及是否在其他代码修改了窗口的属性。 - 调试代码:使用调试工具单步执行代码,观察
GetWindowLongA和SetWindowLongA函数的返回值,以及窗口属性的变化。
常见问题
- 窗口句柄错误: 确保
hwnd是一个有效的窗口句柄。 - 代码执行时机: 确保
setWindowsMousePenetrate函数是在窗口创建后被调用的。 - 其他代码修改窗口属性: 检查其他代码是否修改了窗口的属性,例如
WS_EX_TRANSPARENT属性。
解决方案
- 检查代码并修正错误,确保传入的参数正确,以及函数调用时机正确。
- 使用调试工具进行排查,定位问题所在。
- 如果问题仍然无法解决,可以尝试使用其他实现鼠标穿透功能的 API,例如
SetWindowRgn。
注意: 鼠标穿透功能需要谨慎使用,如果使用不当,可能会导致程序出现不可预知的问题。
原文地址: https://www.cveoy.top/t/topic/nsNg 著作权归作者所有。请勿转载和采集!