Bagikan melalui


Menggunakan API Daya Perangkat

Gunakan elemen pemrograman Daya Perangkat untuk mengelola cara perangkat bekerja saat sistem dalam keadaan tidur.

Membuka dan menutup daftar perangkat

Membuka dan menutup daftar perangkat adalah proses yang mahal dalam hal waktu CPU. Fungsi DevicePowerOpen dan DevicePowerClose yang melakukan ini hanya diperlukan jika aplikasi perlu mengkueri daftar perangkat beberapa kali.

Jika DevicePowerOpen dipanggil, DevicePowerClose harus dipanggil saat kueri daftar perangkat selesai. DevicePowerEnumDevices dan DevicePowerSetDeviceState tidak akan menutup daftar perangkat jika telah dibuka secara eksplisit oleh DevicePowerOpen.

Menghitung perangkat

Fungsi DevicePowerEnumDevices mendeteksi apakah daftar perangkat terbuka, dan jika tidak, membukanya. DevicePowerEnumDevices menghitung perangkat berdasarkan kriteria pencarian yang ditentukan. Jika daftar perangkat dibuka oleh fungsi, daftar ditutup sebelum fungsi kembali.

Mengaktifkan dan menonaktifkan perangkat dari membangunkan sistem

Fungsi DevicePowerSetDeviceState , mirip dengan DevicePowerEnumDevices, mendeteksi apakah daftar perangkat terbuka, dan jika tidak, membukanya. DevicePowerSetDeviceState kemudian menetapkan kriteria yang ditentukan untuk perangkat yang ditentukan. Jika daftar perangkat dibuka oleh fungsi, daftar ditutup sebelum fungsi kembali.

Contoh Kode

Contoh berikut menunjukkan penggunaan Api Daya Perangkat.

#define _WIN32_WINNT 0x0600
#include <Windows.h>
#include <PowrProf.h>
#include <stdio.h>
#include <tchar.h>

#pragma comment(lib, "PowrProf.lib")

int __cdecl main()
{
 // Define and initialize our return variables.
 LPWSTR  pRetBuf = NULL;
 ULONG bufSize = MAX_PATH * sizeof(WCHAR);
 ULONG uIndex = 0;
 BOOLEAN bRet = FALSE;

 // Open the device list, querying all devices
 if (!DevicePowerOpen(0)) 
  {
   printf("ERROR: The device database failed to initialize.\n");
   return FALSE;
  }

 // Enumerate the device list, searching for devices that support 
 // waking from either the S1 or S2 sleep state and are currently 
 // present in the system, and not devices that have drivers 
 // installed but are not currently attached to the system, such as 
 // in a laptop docking station.

 pRetBuf = (LPWSTR)LocalAlloc(LPTR, bufSize);

 while (NULL != pRetBuf && 
        0 != (bRet = DevicePowerEnumDevices(uIndex,
           DEVICEPOWER_FILTER_DEVICES_PRESENT,
           PDCAP_WAKE_FROM_S1_SUPPORTED|PDCAP_WAKE_FROM_S2_SUPPORTED,
           (PBYTE)pRetBuf,
           &bufSize)))
  {
   printf("Device name: %S\n", pRetBuf);

   // For the devices we found that have support for waking from 
   // S1 and S2 sleep states, disable them from waking the system.
   bRet = (0 != DevicePowerSetDeviceState((LPCWSTR)pRetBuf, 
                                  DEVICEPOWER_CLEAR_WAKEENABLED, 
                                  NULL));

   if (0 != bRet) 
    {
     printf("Warning: Failed to set device state.\n");
    }
   uIndex++;
  }

 // Close the device list.
 DevicePowerClose();
 if (pRetBuf!= NULL) LocalFree(pRetBuf);
 pRetBuf = NULL;

 return TRUE;
}

Dalam contoh ini daftar perangkat dibuka sekali, dan ditutup sekali. Jika fungsi DevicePowerOpen dan DevicePowerClose tidak dipanggil, daftar perangkat akan dibuka dan ditutup oleh setiap panggilan ke DevicePowerEnumDevices dan DevicePowerSetDeviceState. Dengan menggunakan DevicePowerOpen dan DevicePowerClose , kami menyimpan pembukaan daftar perangkat dua kali yang tidak perlu.