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;

}

从代码本身来看,没有明显的错误。可能是其他因素导致没有反应,例如传入的参数不正确,或者程序执行顺序有问题等等。

排查思路

  1. 检查参数:确保传入的 hwnd 参数是有效的窗口句柄,并且 setPenetrate 参数的值是 truefalse
  2. 检查程序执行顺序:确认调用 setWindowsMousePenetrate 函数的时机是否正确,以及是否在其他代码修改了窗口的属性。
  3. 调试代码:使用调试工具单步执行代码,观察 GetWindowLongASetWindowLongA 函数的返回值,以及窗口属性的变化。

常见问题

  • 窗口句柄错误: 确保 hwnd 是一个有效的窗口句柄。
  • 代码执行时机: 确保 setWindowsMousePenetrate 函数是在窗口创建后被调用的。
  • 其他代码修改窗口属性: 检查其他代码是否修改了窗口的属性,例如 WS_EX_TRANSPARENT 属性。

解决方案

  • 检查代码并修正错误,确保传入的参数正确,以及函数调用时机正确。
  • 使用调试工具进行排查,定位问题所在。
  • 如果问题仍然无法解决,可以尝试使用其他实现鼠标穿透功能的 API,例如 SetWindowRgn

注意: 鼠标穿透功能需要谨慎使用,如果使用不当,可能会导致程序出现不可预知的问题。

C++ lanrenAPI::setWindowsMousePenetrate 函数疑难解答 - 鼠标穿透功能失效

原文地址: https://www.cveoy.top/t/topic/nsNg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录