windows-vista - PowerEnumerate 函数返回哪些结构/数据

标签 windows-vista power-management

新的Vista API的文档说PowerEnumerate函数可以用来枚举电源方案、方案设置以及丰富的信息,最后两个参数是Buffer和BufferSize,不清楚的是是什么结构或者数据布局/format 用于 API 在缓冲区中返回的数据?

最佳答案

输出缓冲区是一个 GUID。您可以使用此 guid 对 Power* 函数进行其他调用(即递归遍历树、查询设置名称和值等)。

例如,以下代码从当前电源方案中的磁盘电源设置中枚举一些设置名称:

GUID *scheme;

if(ERROR_SUCCESS == PowerGetActiveScheme(NULL, &scheme))
{
    GUID buffer;
    DWORD bufferSize = sizeof(buffer);

    for(int index = 0; ; index++)
    {
        if(ERROR_SUCCESS == PowerEnumerate(
                                NULL,
                                scheme, 
                                &GUID_DISK_SUBGROUP, 
                                ACCESS_INDIVIDUAL_SETTING, 
                                index, 
                                (UCHAR*)&buffer, 
                                &bufferSize))
        {
            UCHAR displayBuffer[1024];
            DWORD displayBufferSize = sizeof(displayBuffer);

            if(ERROR_SUCCESS == PowerReadFriendlyName(
                                    NULL, 
                                    scheme, 
                                    &GUID_DISK_SUBGROUP, 
                                    &buffer, 
                                    displayBuffer, 
                                    &displayBufferSize))
            {
                wprintf(L"%s\n", (wchar_t*)displayBuffer);
            }
        }
    }
}

如您所见,步骤是:

  1. 获取当前的电源方案
  2. 枚举当前方案中的磁盘设置
  3. 打印每个枚举设置的友好名称

在我的机器上输出:

Turn off hard disk after
Hard disk burst ignore time

希望这可以帮助您指明正确的方向。

这不是生产质量代码,它更注重小尺寸和乐观的缓冲区大小而不是鲁棒性。

关于windows-vista - PowerEnumerate 函数返回哪些结构/数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/965159/

相关文章:

winapi - RTLCopyMemory 在 Vista 中工作吗?

c# - 如何处理失败的 DllImport?

PowerShell/WMI 电源管理

delphi - 新的 TFileOpenDialog 和旧的 TOpenDialog 有什么区别?

尽管 Eclipse 和 SDK 管理器在 Vista 上以管理员身份运行,但 Android-SDK 包安装错误

java - 如何诊断 Windows Vista 中的 Java JNI EXCEPTION_ACCESS_VIOLATION 错误

machine-learning - 电源管理的强化学习

c++ - 当计算机处于 sleep 状态时电源状态发生变化时,我可以收到通知吗?

android - 如何在插入时防止Android设备进入休眠状态

c# - 在 Window CE 中禁用挂起