我正在研究捕获活动窗口的屏幕捕获实用程序 . 我正在使用透明覆盖来捕获全屏,然后根据传递到底层桌面/窗口的鼠标移动事件覆盖活动窗口 .

两个叠加窗口当前使用 WS_EX_TRANSPARENT 样式允许鼠标事件传递到底层窗口,以便我可以检测鼠标光标所在的位置 . 我 grab 窗口手柄和矩形大小来勾勒窗口,然后使用全局鼠标和键盘钩子来接受或拒绝捕获 .

它非常丑陋并且分散了代码(这就是为什么我现在不在这里发布)但是它一切都很好用,我可以在mousemove中突出显示窗口并使用全局鼠标和键处理程序捕获点击 .

一切正常 except for this problem

全局Windows挂钩不会触发管理员窗口,因此当我想捕获Powershell,Command或Visual Studio(在管理模式下)窗口时,不会转发挂钩事件 .

显然,使用Windows挂钩(或 GetAsyncKeystate() )无法解决此安全问题 .

我尝试了几种不同的方法来解决这个问题:

  • 我尝试使用突出显示窗口捕获鼠标/键事件,而不是使用Hooks
    这种工作方式,但是一旦选择了父级,它就允许选择包含的窗口(即没有向下钻取)

  • 我也尝试过Win32 GetAsyncKeystate() ,它可以捕获最后一个鼠标或键盘输入,但是它也无法从Admin窗口发送鼠标或键交互 .

所以我现在有两个选择不完美的解决方案:使用Hooks或 GetAsyncKeyState 为除了管理员窗口之外的所有窗口获取正确的窗口浏览选择行为,或者我可以捕获所有窗口但是在选择父窗口后无法钻入子窗口 .

我已经走到了尽头,真正的问题是:

有没有办法创建一个半透明或透明的窗口,可以截取鼠标点击 and 将它们传递到下面的窗口区域?