gpt4 book ai didi

c# - 弹出 UAC 消息时屏幕颜色默认为正常(无法检测)

转载 作者:行者123 更新时间:2023-11-30 21:59:20 25 4
gpt4 key购买 nike

我创建了一个程序,可以根据日落和日出自动调整屏幕的滤色器。我使用 GetDeviceGammaRamp()SetDeviceGammaRamp() 方法 from here实现这一目标。

但是,有一个问题。当计算机从 sleep 中醒来,或弹出 UAC 消息 时(例如:打开安装 exe 文件),然后在我的笔记本电脑上,屏幕颜色恢复正常。如果它是临时的,一切都很好,但它执行此操作的方式虽然看起来不标准,因为之后,GetDeviceGammaRamp() 返回相同的先前颜色,而不是显示的新颜色!此外,如果我使用 SetDeviceGammaRamp() 尝试重新设置旧颜色,它会拒绝设置。但是,如果我使用 SetDeviceGammaRamp() 来更改 RGB 颜色,即使只是轻微的(例如:RGB = 80,80,81 而不是old 80,80,80),那么 Windows 会愉快地将颜色设置为该值。

要是我有一个万无一失的方法来检测 Windows 何时像这样更改屏幕颜色就好了。或者做不到这一点,如果它能响应将颜色改回旧颜色而不是思考“但你已经处于那个 RGB 颜色,那你为什么要再次设置它!” ,显然不是。

不幸的是,除非我找到解决方案,否则我必须强制程序每隔一分钟左右(包括我自己在内的许多人)会注意到一种非常轻微不同的颜色。这是为了防止 UAC 提示或计算机唤醒发生而改变了屏幕的颜色。

顺便说一下,著名的F.lux 程序并没有解决这个问题,因为他们的程序也有这个问题。有趣的是,当 UAC 提示出现时,我的桌面保持相同的颜色 - 只是我的笔记本电脑有问题。

最佳答案

If only I had a fool-proof way of detecting when Windows changes the screen's colour like this

当 Windows 显示 UAC 提示时,了解真正发生了什么非常重要。它看起来就像在用户桌面上显示对话框一样。然而,这是一种错觉,它实际上将 View 切换到安全桌面。与您启动时用于显示登录提示或锁定工作站(Win+L 键)或按 Ctrl+Alt+Del 键时切换到的相同。

您看到用户桌面的错觉实现起来非常简单,它只是在后台显示屏幕截图。这样也很容易使它看起来更暗。

出于显而易见的原因,安全桌面是高度防篡改的。首先,您无法判断它是否处于事件状态,这会使恶意软件很容易开始探测。另一方面,如果 SetDeviceGammaRamp() 也影响了安全桌面,那么它就太危险了。恶意软件可能会做出一些矫揉造作的事情,例如将斜坡设置为全黑,从而使它看起来就像用户完全失去了控制,无法再使 Ctrl+Alt+Del 工作。所以它没有任何效果,您会得到默认的斜坡。​​

虽然您无法检测到安全桌面处于事件状态,但您可以获得 session 切换的通知。 WTSRegisterSessionNotification() 函数。但这并没有帮助,您设置的斜坡仍然只适用于用户的桌面。要使其永久存在,您必须说服视频驱动程序应用颜色校正配置文件。通常由控制面板 + 颜色校正小程序完成。或者视频驱动程序随附的常用铲子软件。在你自己的程序中是如何完成的很难找到,它肯定不是很实用,因为它需要 UAC 提示:)

关于c# - 弹出 UAC 消息时屏幕颜色默认为正常(无法检测),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29329119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com