我正在更新旧版应用程序。该应用程序的主要部分涉及屏幕捕获。当前,我们使用放大镜捕获屏幕(MagSetImageScalingCallback )。
此值已贬值,但在大多数情况下似乎仍然有效。
启用Windows透明效果(设置/颜色/透明效果)并且屏幕上出现透明项目时,捕获的图像无法正确渲染,仅显示透明层下的项目。禁用此选项,一切正常。
在那里
我感谢所使用的放大镜调用已被贬值,因此可能无法解决此问题。
Transparency Effects as can be enabled/disabled in settings/personalisation/colour
答案 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)
标志的按位操作。
有几种检索窗口句柄的方法,例如GetWindowLongPtr或GetActiveWindow,还有其他方法。
您还可以使用GetForegroundWindow来更改窗口上特定颜色键的不透明度。我相信MSDN SetLayeredWindowAttributes上有一个例子。
编辑:我误解了您的原始帖子,并假定您指的是各个窗口的透明度。尽管我不确定是否存在API来检查您所指的Windows 10透明度,但实际上,如果将其设置为0透明度,则实际上存在一个名为WS_EX_LAYERED
的REG_DWORD键,其路径为EnableTransparency
已禁用,已启用1。这可能是您要寻找的。
您可以使用Using Layered Windows函数导航到注册表路径并检索可以使用RegOpenkey的特定键的值,也可以更改可以使用RegQueryValueEx的特定键的值完成后,别忘了致电RegSetKeyValue。