Vielen Dank Leute.
Damit klappt es.
Theoretisch geht zwar auch:
Delphi-Quellcode:
iType_1 := REG_SZ;
iBufferSize := 255;
GetMem(buffer_1, iBufferSize);
res :=
PowerReadACValue(
0, pActivePolicyGuid^,
USBSetting, USBSelectiveSuspendSetting,
@iType_1, buffer_1, @iBufferSize
);
if (res = ERROR_SUCCESS) then
begin
engState.LastCheck := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now());
engState.UsbEng := (buffer_1^ = 1);
end;
aber die Verwendung von Reg_SZ, was ja eigendlich auf einen String verweist verwirrt mich zu sehr
daher habe ich das dann so gelöst:
Delphi-Quellcode:
AcValueIndex := 0;
res :=
PowerReadACValueIndex(
0, TGUID(pActivePolicyGuid^), // Referenzwert
USBSetting, USBSelectiveSuspendSetting, // Pfad zu den Daten
@AcValueIndex // Rückgabewert
);
if (res = ERROR_SUCCESS) then
begin
engState.LastCheck := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now());
engState.UsbEng := (AcValueIndex = 1);
end;
Zumal ich bei der ersten Lösung theoretisch auch noch auf den Rückgabewert "ERROR_MORE_DATA"
prüfen müsste.
Zum Thema "Einstellung aus Gerätemanager": Ne, bei der Einrichtung unserer Server sind die
Techniker angewiesen die Energieoptionen entsprechend anzupassen, da dies immer wieder
Probleme macht. Hiermit könnte man prüfen, ob beim Kunden dieser Wert (von deren Technikern)
wieder geändert wird.
Ja, theoretisch könnte man auch alle einzelnen Geräte, welche Fehler produzieren wenn man
diese in den Energiesparmodus schickt, einzeln über den Gerätemanager rausnehmen,
aber der Verwaltungsaufwand ist zu hoch und die Fehlerquellen multiplizierfen sich hier ja auch.
Das ist zwar mit der groben Kelle, aber mal ehrlich, wer will das bei allen Kunden bis ins letzte
Detail korrekt einstellen müssen. Von eigenmächtigem Austausch irgendwelcher Hardware mal ganz abgesehen.
Wie gesagt. Für mich sieht die Lösung schon sehr gut aus. Ich teste das mal die Tage.
Vielen Dank nochmal für die echt schnelle Hilfe.
Liebe Grüße
Incocnito