gpt4 book ai didi

c# - 获取当前的笔记本电脑盖子状态

转载 作者:可可西里 更新时间:2023-11-01 16:42:22 24 4
gpt4 key购买 nike

我正在编写一个 C# 应用程序(专门用于笔记本电脑),我想了解盖子的状态,即它何时打开以及何时关闭。

我已经将 pInvoke 与 Microsoft's RegisterPowerSettingNotification function 一起使用了在this SO answer的帮助下.

所以,有了上面的内容,我知道盖子何时关闭或打开,并知道它的状态,但是我想在其他任何事情继续之前了解盖子的状态。我注意到即使盖子没有变化,回调函数也会被调用,我可以检查它的参数以了解盖子的状态,但这对我不利,因为它是一个事件,我不能简单地等待让它发生(也许有另一种方法可以解决这个问题?)。

我也尝试过 PowerEnumerate 函数,但无法从中得到任何东西(也许有一些我不知道的东西可以帮助)

编辑 1:我等不及或延迟应用程序,有 2 个问题需要我在没有 CB 的情况下获得状态,第一个是笔记本电脑连接到显示器时可以关闭盖子,从而允许用户使用笔记本电脑。如果用户在这种情况下启动应用程序,则它不应启动。第二个原因是我希望应用程序对用户友好,并通知它在启动或停止时发生的情况,如果我在错误的时间收到 cb,由于应用程序的内部逻辑,它可能会被忽略,然后将不得不等到下次我得到 cb 时,我会的。

所以,(没有双关语意)有没有办法立即获得这些信息?

编辑 2:从评论中似乎不清楚我需要什么。我需要一种查询盖子状态的方法。即 - 调用一些 API 或其他东西,返回值是状态。谢谢!

关键字:GUID_LIDSWITCH_STATE_CHANGE,WM_POWERBROADCAST,电源设置

最佳答案

我认为“lid state”不能保证反射(reflect)在电源管理属性中。您对盖子状态的兴趣是否仅仅取决于显示器?如果是这样,您可以找到一种方法来确定集成屏幕的属性(如果他们在连接到外部显示器时安装它可能会出现问题)并保存它们。然后检查正在使用的屏幕的属性并采取相应措施。

参见 System.Windows.Forms.Screen - http://msdn.microsoft.com/en-us/library/system.windows.forms.screen%28v=vs.110%29.aspx

可以从 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY 中的“设备参数”键中提取序列号。此处演示了如何提取它(连同其他信息):

http://sourceforge.net/p/wmimonitor/code/HEAD/tree/DisplayInfoWMIProvider/WMIProvider/WMIProvider.cs

或者,假设即使 Windows 中的机盖关闭事件设置为“不执行任何操作”,回调仍会触发,您或许可以考虑使用辅助进程或服务来一直运行并跟踪更改。您可以通过注册表或文件共享状态。您还可以查看是否有任何其他硬件项目(例如触摸板)在关闭时更改电源状态,而不管“电源计划”如何,并使用 GetDevicePowerState API 函数。

关于c# - 获取当前的笔记本电脑盖子状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26869987/

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