如何使用电源pipe理function(PowerEnuimerate)获取电源设置

如何使用电源pipe理function(PowerEnuimerate)获取电源设置,第1张

概述如何使用电源pipe理function(PowerEnuimerate)获取电源设置

我需要我的应用程序来读取诸如在closures显示器,进入睡眠或进入hibernate状态之前系统等待的时间。 据我所知,我需要使用电源pipe理function( http://msdn.microsoft.com/en-us/library/aa373163%28v=vs.85%29.aspx )特别是,它看起来像我需要使用PowerEnumerate方法( http://msdn.microsoft.com/en-us/library/aa372730%28v=vs.85%29.aspx )。

我真的很困惑如何做到这一点。 首先,我在C#中做了这个,代码看起来是C ++。 其次,C ++代码似乎并没有真正告诉你如何具体阅读我想要的不同时间。

请注意,我是windows编程和C#的新手。 我的大部分经验都在Java和AndroID上。

谢谢

在窗体中绘制带有resize点的控件select矩形

Environment.FailFast在C#应用程序

屏幕保护程序仍然必须安装到System32?

当我在文本框中input时出现恼人的嘟嘟声

.NET进程间“事件”

在CentOS或linux上使用Mono执行.Net应用程序

自动填充域用户

64位.Net应用程序中的内存限制?

所有用户都可以在同一台电脑上写入文件夹

PowerShell如何使按键上的及时更改?

我在MSDN上找到了一个在VB中使用PowerEnumerate函数的例子 。

我已经将示例转换为C#,并将友好名称添加到循环中每个视频设置的输出中。 您可以将GUID_VIDEO_SUBGROUP更改为其他子组之一以查看其他设置。

using System; using System.ComponentModel; using System.Runtime.InteropServices; using System.Text; namespace TestProject { class PowerEnumerator { private static GuID NO_SUBGROUP_GUID = new GuID("fea3413e-7e05-4911-9a71-700331f1c294"); private static GuID GUID_disK_SUBGROUP = new GuID("0012ee47-9041-4b5d-9b77-535fba8b1442"); private static GuID GUID_SYstem_button_SUBGROUP = new GuID("4f971e89-eebd-4455-a8de-9e59040e7347"); private static GuID GUID_PROCESSOR_SETTINGS_SUBGROUP = new GuID("54533251-82be-4824-96c1-47b60b740d00"); private static GuID GUID_VIDEO_SUBGROUP = new GuID("7516b95f-f776-4464-8c53-06167f40cc99"); private static GuID GUID_BATTERY_SUBGROUP = new GuID("e73a048d-bf27-4f12-9731-8b2076e8891f"); private static GuID GUID_SLEEP_SUBGROUP = new GuID("238C9FA8-0AAD-41ED-83F4-97BE242C8F20"); private static GuID GUID_PCIEXPRESS_SETTINGS_SUBGROUP = new GuID("501a4d13-42af-4429-9fd1-a8218c268e20"); [Dllimport("powrprof.dll")] static extern uint PowerEnumerate( IntPtr RootPowerKey,IntPtr SchemeGuID,ref GuID SubGroupOfPowerSetting,uint AccessFlags,uint Index,ref GuID Buffer,ref uint BufferSize); [Dllimport("powrprof.dll")] static extern uint PowerGetActiveScheme( IntPtr UserRootPowerKey,ref IntPtr ActivePolicyGuID); [Dllimport("powrprof.dll")] static extern uint PowerReadACValue( IntPtr RootPowerKey,IntPtr SubGroupOfPowerSettingGuID,ref GuID PowerSettingGuID,ref int Type,ref IntPtr Buffer,ref uint BufferSize ); [Dllimport("powrprof.dll",CharSet = CharSet.Unicode)] static extern uint PowerReadFrIEndlyname( IntPtr RootPowerKey,IntPtr PowerSettingGuID,StringBuilder Buffer,ref uint BufferSize ); [Dllimport("kernel32.dll")] static extern IntPtr LocalFree( IntPtr hMem ); private const uint ERROR_MORE_DATA = 234; public static voID GetCurrentPowerEnumerateVistaAPI() { IntPtr activeGuIDPtr = IntPtr.Zero; try { uint res = PowerGetActiveScheme(IntPtr.Zero,ref activeGuIDPtr); if (res != 0) throw new Win32Exception(); //Get FrIEndly name uint buffSize = 0; StringBuilder buffer = new StringBuilder(); GuID subGroupGuID = GuID.Empty; GuID powerSettingGuID = GuID.Empty; res = PowerReadFrIEndlyname(IntPtr.Zero,activeGuIDPtr,IntPtr.Zero,buffer,ref buffSize); if (res == ERROR_MORE_DATA) { buffer.Capacity = (int)buffSize; res = PowerReadFrIEndlyname(IntPtr.Zero,ref buffSize); } if (res != 0) throw new Win32Exception(); Console.Writeline("ReadFrIEndlyname = " + buffer.ToString()); //Get the Power Settings GuID VIDeoSettingGuID = GuID.Empty; uint index = 0; uint BufferSize = Convert.ToUInt32(Marshal.SizeOf(typeof(GuID))); while ( PowerEnumerate(IntPtr.Zero,ref GUID_VIDEO_SUBGROUP,18,index,ref VIDeoSettingGuID,ref BufferSize) == 0) { uint size = 4; IntPtr temp = IntPtr.Zero; int type = 0; res = PowerReadACValue(IntPtr.Zero,ref type,ref temp,ref size); IntPtr pSubGroup = Marshal.AllocHGlobal(Marshal.SizeOf(GUID_VIDEO_SUBGROUP)); Marshal.StructuretoPtr(GUID_VIDEO_SUBGROUP,pSubGroup,false); IntPtr pSetting = Marshal.AllocHGlobal(Marshal.SizeOf(VIDeoSettingGuID)); Marshal.StructuretoPtr(VIDeoSettingGuID,pSetting,false); uint builderSize = 200; StringBuilder builder = new StringBuilder((int)builderSize); res = PowerReadFrIEndlyname(IntPtr.Zero,builder,ref builderSize); Console.Writeline(builder.ToString() + " = " + temp.ToString()); index++; } } finally { if (activeGuIDPtr != IntPtr.Zero) { IntPtr res = LocalFree(activeGuIDPtr); if (res != IntPtr.Zero) throw new Win32Exception(); } } } } }

从这个代码得到的输出:

总结

以上是内存溢出为你收集整理的如何使用电源pipe理function(PowerEnuimerate)获取电源设置全部内容,希望文章能够帮你解决如何使用电源pipe理function(PowerEnuimerate)获取电源设置所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1292375.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存