是否有Windows API函数可在Windows 10上获得当前的透明效果

时间:2019-05-01 14:38:10

标签: c++ winapi windows-10

我正在更新旧版应用程序。该应用程序的主要部分涉及屏幕捕获。当前,我们使用放大镜捕获屏幕(MagSetImageScalingCallback )。

此值已贬值,但在大多数情况下似乎仍然有效。

启用Windows透明效果(设置/颜色/透明效果)并且屏幕上出现透明项目时,捕获的图像无法正确渲染,仅显示透明层下的项目。禁用此选项,一切正常。

在那里

  1. 一种检测是否启用/禁用透明效果的方法
  2. 启用/禁用透明效果的方法。

我感谢所使用的放大镜调用已被贬值,因此可能无法解决此问题。

Transparency Effects as can be enabled/disabled in settings/personalisation/colour

1 个答案:

答案 0 :(得分:0)

您可以使用功能SetWindowLongPtr  和GetWindowLongPtr使窗口透明或检查窗口是否透明。 为了删除透明度,您将需要删除WS_EX_LAYERED标志,这可以通过使用窗口句柄hwnd并将int nIndex参数设置为{{ 1}}。对于GWL_EXSTYLE参数,您将要调用SetWindowLongPtr并删除LONG dwNewLong标志。 您可以像这样对函数进行调用:

WS_EX_LAYERED

这只是删除SetWindowLongPtr(hwnd,GWL_EXSTYLE,GetWindowLongPtr(hwnd, GWL_EXSTYLE) & ~ WS_EX_LAYERED) 标志的按位操作。

有几种检索窗口句柄的方法,例如GetWindowLongPtrGetActiveWindow,还有其他方法。

您还可以使用GetForegroundWindow来更改窗口上特定颜色键的不透明度。我相信MSDN SetLayeredWindowAttributes上有一个例子。

编辑:我误解了您的原始帖子,并假定您指的是各个窗口的透明度。尽管我不确定是否存在API来检查您所指的Windows 10透明度,但实际上,如果将其设置为0透明度,则实际上存在一个名为WS_EX_LAYERED的REG_DWORD键,其路径为EnableTransparency已禁用,已启用1。这可能是您要寻找的。 您可以使用Using Layered Windows函数导航到注册表路径并检索可以使用RegOpenkey的特定键的值,也可以更改可以使用RegQueryValueEx的特定键的值完成后,别忘了致电RegSetKeyValue