Dabei ist das gar nicht soo kompliziert. Man muss das ganze nur einmal übersetzen. Ich hoffe ich hab das so richtig gemacht (funktioniert zumindest):
Delphi-Quellcode:
const PWR_PROF = 'PowrProf.dll';
{$EXTERNALSYM _POWER_DATA_ACCESSOR}
type _POWER_DATA_ACCESSOR = (
ACCESS_AC_POWER_SETTING_INDEX = 0, // 0x0
ACCESS_DC_POWER_SETTING_INDEX = 1, // 0x1
ACCESS_SCHEME = 16, // 0x10
ACCESS_SUBGROUP = 17, // 0x11
ACCESS_INDIVIDUAL_SETTING = 18, // 0x12
ACCESS_ACTIVE_SCHEME = 19, // 0x13
ACCESS_CREATE_SCHEME = 20 // 0x14
);
{$EXTERNALSYM POWER_DATA_ACCESSOR}
POWER_DATA_ACCESSOR = _POWER_DATA_ACCESSOR;
{$EXTERNALSYM PPOWER_DATA_ACCESSOR}
PPOWER_DATA_ACCESSOR = ^_POWER_DATA_ACCESSOR;
const NO_SUBGROUP_GUID: TGUID = '{fea3413e-7e05-4911-9a71-700331f1c294}';
GUID_DISK_SUBGROUP: TGUID = '{0012ee47-9041-4b5d-9b77-535fba8b1442}';
GUID_SYSTEM_BUTTON_SUBGROUP: TGUID = '{4f971e89-eebd-4455-a8de-9e59040e7347}';
GUID_PROCESSOR_SETTINGS_SUBGROUP: TGUID = '{54533251-82be-4824-96c1-47b60b740d00}';
GUID_VIDEO_SUBGROUP: TGUID = '{7516b95f-f776-4464-8c53-06167f40cc99}';
GUID_BATTERY_SUBGROUP: TGUID = '{e73a048d-bf27-4f12-9731-8b2076e8891f}';
GUID_SLEEP_SUBGROUP: TGUID = '{238C9FA8-0AAD-41ED-83F4-97BE242C8F20}';
GUID_PCIEXPRESS_SETTINGS_SUBGROUP: TGUID = '{501a4d13-42af-4429-9fd1-a8218c268e20}';
{$EXTERNALSYM PowerSetActiveScheme}
function PowerSetActiveScheme(UserRootPowerKey: HKEY; const SchemeGUID: PGUID):
DWORD; stdcall; external PWR_PROF;
{$EXTERNALSYM PowerEnumerate}
function PowerEnumerate(UserRootPowerKey: HKEY; const SchemeGuid: PGUID;
const SubGroupOfPowerSettingGuid: PGUID; AccessFlag: POWER_DATA_ACCESSOR;
Index: ULONG; Buffer: PUCHAR; BufferSize: PDWORD):
DWORD; stdcall; external PWR_PROF;
Wenn man den Teil nun hat ist der Rest ganz einfach. Die Power-Schemes könnte man zum Bleistift nun so auflisten:
Delphi-Quellcode:
procedure TEinForm.ButtonClick(Sender: TObject);
var res, size: DWORD;
i: ULONG;
tmp: TGUID;
begin
i := 0;
size := SizeOf(TGUID);
repeat
res := PowerEnumerate(0, nil, nil, ACCESS_SCHEME, i, @tmp, @size);
if res = ERROR_SUCCESS then
Memo.Lines.Add(GUIDToString(tmp));
Inc(i);
until res <> ERROR_SUCCESS;
end;
Um mich selber zu zitieren:
Zitat von
Mr_G:
Dort steht eigentlich alles Relavante zur Anwendung.
Gruß
Mr_G
P.S.: Vielleicht wäre das hier und
dieses auch was für die CodeLib