Gude,
ich bin etwas weitergekommen, stehe nun aber wieder vor ner Wand... Mein altes Problem konnte ich beheben, indem ich einen Zeiger auf die Speicheradresse der TGUID im Funktionsaufruf verwendet habe.
Ich lade folgende Funktionen:
Delphi-Quellcode:
{$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;
{$EXTERNALSYM PowerGetActiveScheme}
function PowerGetActiveScheme(UserRootPowerKey: HKEY; Buffer: PGUID): DWORD;
stdcall; external PWR_PROF;
{$EXTERNALSYM PowerReadDescription}
function PowerReadDescription(UserRootPowerKey: HKEY; const SchemeGuid: PGUID;
const SubGroupOfPowerSettingGuid: PGUID; const PowerSettingGuid: PGUID;
Buffer: PUCHAR; BufferSize: PDWORD):
DWORD; stdcall; external PWR_PROF;
{$EXTERNALSYM PowerReadDescription}
function PowerReadFriendlyName(RootPowerKey: HKEY; const SchemeGuid: PGUID;
const SubGroupOfPowerSettingGuid: PGUID; const PowerSettingGuid: PGUID;
Buffer: PUCHAR; BufferSize: PDWORD):
DWORD; stdcall; external PWR_PROF;
In der Listbox lb1 werden die Strings zu den EnergieschemaGUIDS eingetragen. Per Klick auf Button3 wird das markierte Schema ausgewählt (PowerSetActiveScheme) und das funktioniert auch. Ich würde allerdings gern Informationen zu den jeweiligen Schemata erhalten. Die auskommentierten Zeilen mit den Aufrufen von PowerReadDescription und PowerReadFriendlyName liefern als Ergebnis nicht ERROR_SUCCESS. Mache ich irgendwas falsch oder verwende ich die falschen Funktionen? Zusätzlich möchte ich Einstellungen so abändern können, dass der Monitor nicht abgeschaltet wird und der Rechner nicht in den Standby verfällt. Hat sowas schon mal jemand von Euch gemacht?
MfG
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var res, size: DWORD;
tmp: TGUID;
function getSel:integer;
var i : integer;
begin
result := 0;
for i := 0 to lb1.Items.Count-1 do
if(lb1.Selected[i]) then begin
result := i;
break;
end;
end;
begin
size := SizeOf(TGUID);
active_guid := StringToGuid(lb1.Items[getSel()]);
//res := PowerReadDescription(0, @active_guid, @NO_SUBGROUP_GUID, nil, @tmp, @size);
//res := PowerReadFriendlyName(0, @active_guid, nil, nil, @tmp, @size);
res := PowerSetActiveScheme(0, @active_guid);
// @active_guid ist ein zeiger auf die speicheradresse von active_guid.
if res = ERROR_SUCCESS then
lb1.Items.Add('->'+GUIDToString(active_guid))
else
lb1.Items.Add('Fehler -> '+GUIDToString(tmp));
end;