2009-06-08 12 views
1

新しいVistaのAPIのドキュメントがPowerEnumerate機能は、電源設定、スキームの設定、および豊富な情報を列挙するために使用することができることを述べていない、最後の2つのパラメータバッファおよびたBufferSizeは何の構造/データ、何APIによってバッファに返されるデータに、構造やデータのレイアウト/形式がどのように使用されているかは不明です。PowerEnumerate関数の戻り

+0

マン、+1これは私が今までMSDNで見てきた醜いAPIドキュメントなければならないので。私は私の人生のために多分、時計でそれを調べて、それが文字列またはGUIDまたは何かかどうしよう除いて、そのバッファを使用する方法を見つけることができません。 –

答えて

2

出力バッファは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. 列挙された各設定のフレンドリ名を表示
  4. 私のマシン上で

出力:

 
Turn off hard disk after 
Hard disk burst ignore time 

がうまくいけば、これはあなたが正しい方向に向け得ることができます。

これは、堅牢性の上に小さなサイズと楽観的なバッファサイズを優先する生産品質のコードではありません。