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.