2

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

4

1 回答 1

3

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

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

GUID *方案;

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

    for(int index = 0; ; index++)
    {
        if(ERROR_SUCCESS == PowerEnumerate(
                                无效的,
                                方案,
                                &GUID_DISK_SUBGROUP,
                                ACCESS_INDIVIDUAL_SETTING,
                                指数,
                                (UCHAR*)&缓冲区,
                                &缓冲区大小))
        {
            UCHAR 显示缓冲区[1024];
            DWORD displayBufferSize = sizeof(displayBuffer);

            if(ERROR_SUCCESS == PowerReadFriendlyName(
                                    无效的,
                                    方案,
                                    &GUID_DISK_SUBGROUP,
                                    &缓冲,
                                    显示缓冲区,
                                    &displayBufferSize))
            {
                wprintf(L"%s\n", (wchar_t*)displayBuffer);
            }
        }
    }
}

如您所见,步骤如下:

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

在我的机器上输出:

关闭硬盘后
硬盘爆裂忽略时间

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

这不是生产质量代码,它倾向于小尺寸和乐观的缓冲区大小而不是健壮性。

于 2009-06-12T04:14:49.110 回答