新的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); } } } }
如您所见,步骤是:
- 获取当前的电源方案
- 枚举当前方案中的磁盘设置
- 打印每个枚举设置的友好名称
在我的机器上输出:
Turn off hard disk after Hard disk burst ignore time
希望这可以帮助您指明正确的方向。
这不是生产质量代码,它更注重小尺寸和乐观的缓冲区大小而不是鲁棒性。
关于windows-vista - PowerEnumerate 函数返回哪些结构/数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/965159/