AW: Abfragen der Eigenschaften eines Energieschemas
Zitat:
Zitat:
du bist ein :angel: und ja, hölle trifft es ganz gut :lol: danke für diesen tollen beitrag!! :thumb: |
AW: Abfragen der Eigenschaften eines Energieschemas
Vielen Dank Leute.
Damit klappt es. Theoretisch geht zwar auch:
Delphi-Quellcode:
aber die Verwendung von Reg_SZ, was ja eigendlich auf einen String verweist verwirrt mich zu sehr
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; daher habe ich das dann so gelöst:
Delphi-Quellcode:
Zumal ich bei der ersten Lösung theoretisch auch noch auf den Rückgabewert "ERROR_MORE_DATA"
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; 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 |
AW: Abfragen der Eigenschaften eines Energieschemas
In meinem Kopf dreht sich alles, aber irgendwie bekomme ich (hoffentlich auch das korrekte) ein Ergebnis.
Falls jemand verrückt genug ist das mal zu überprüfen wäre ich echt erleichtert!!
Delphi-Quellcode:
Bei mir kommt folgendes raus:
program Project20;
{$APPTYPE CONSOLE} {$R *.res} uses Winapi.Windows, System.SysUtils, System.Classes; { https://docs.microsoft.com/en-us/windows/win32/api/powersetting/nf-powersetting-powergetactivescheme DWORD PowerGetActiveScheme( HKEY UserRootPowerKey, GUID **ActivePolicyGuid ); Parameters UserRootPowerKey This parameter is reserved for future use and must be set to NULL. ActivePolicyGuid A pointer that receives a pointer to a GUID structure. Use the LocalFree function to free this memory. Return value Returns ERROR_SUCCESS (zero) if the call was successful, and a nonzero value if the call failed. } function PowerGetActiveScheme(UserRootPowerKey: HKEY; var ActivePolicyGuid: PGUID): DWORD; stdcall; external 'PowrProf.dll'; { https://docs.microsoft.com/en-us/windows/win32/api/powrprof/nf-powrprof-powerreaddescription DWORD PowerReadDescription( HKEY RootPowerKey, const GUID *SchemeGuid, const GUID *SubGroupOfPowerSettingsGuid, const GUID *PowerSettingGuid, PUCHAR Buffer, LPDWORD BufferSize ); Parameters RootPowerKey This parameter is reserved for future use and must be set to NULL. SchemeGuid The identifier of the power scheme. SubGroupOfPowerSettingsGuid The subgroup of power settings. This parameter can be one of the following values defined in WinNT.h. Use NO_SUBGROUP_GUID to refer to the default power scheme. TABLE 1 Value Meaning NO_SUBGROUP_GUID fea3413e-7e05-4911-9a71-700331f1c294 Settings in this subgroup are part of the default power scheme. GUID_DISK_SUBGROUP 0012ee47-9041-4b5d-9b77-535fba8b1442 Settings in this subgroup control power management configuration of the system's hard disk drives. GUID_SYSTEM_BUTTON_SUBGROUP 4f971e89-eebd-4455-a8de-9e59040e7347 Settings in this subgroup control configuration of the system power buttons. GUID_PROCESSOR_SETTINGS_SUBGROUP 54533251-82be-4824-96c1-47b60b740d00 Settings in this subgroup control configuration of processor power management features. GUID_VIDEO_SUBGROUP 7516b95f-f776-4464-8c53-06167f40cc99 Settings in this subgroup control configuration of the video power management features. GUID_BATTERY_SUBGROUP e73a048d-bf27-4f12-9731-8b2076e8891f Settings in this subgroup control battery alarm trip points and actions. GUID_SLEEP_SUBGROUP 238C9FA8-0AAD-41ED-83F4-97BE242C8F20 Settings in this subgroup control system sleep settings. GUID_PCIEXPRESS_SETTINGS_SUBGROUP 501a4d13-42af-4429-9fd1-a8218c268e20 Settings in this subgroup control PCI Express settings. PowerSettingGuid The identifier of the power setting that is being used. Buffer A pointer to a buffer that receives the description. If this parameter is NULL, the BufferSize parameter receives the required buffer size. The strings returned are all wide (Unicode) strings. BufferSize A pointer to a variable that contains the size of the buffer pointed to by the Buffer parameter. If the Buffer parameter is NULL, the function returns ERROR_SUCCESS and the variable receives the required buffer size. If the specified buffer size is not large enough to hold the requested data, the function returns ERROR_MORE_DATA and the variable receives the required buffer size. Return value Returns ERROR_SUCCESS (zero) if the call was successful, and a nonzero value if the call failed. If the buffer size specified by the BufferSize parameter is too small, the function returns ERROR_SUCCESS and the DWORD pointed to by the BufferSize parameter is filled in with the required buffer size. } function PowerReadDescription(RootPowerKey: HKEY; const SchemeGuid: TGUID; const SubGroupOfPowerSettingsGuid: TGUID; const PowerSettingGuid: TGUID; Buffer: PUCHAR; BufferSize: LPDWORD): DWORD; stdcall; external 'PowrProf.dll'; { https://docs.microsoft.com/en-us/windows/win32/api/powrprof/nf-powrprof-powerreadacvalueindex DWORD PowerReadACValueIndex( HKEY RootPowerKey, const GUID *SchemeGuid, const GUID *SubGroupOfPowerSettingsGuid, const GUID *PowerSettingGuid, LPDWORD AcValueIndex ); Parameters RootPowerKey This parameter is reserved for future use and must be set to NULL. SchemeGuid The identifier of the power scheme. SubGroupOfPowerSettingsGuid The subgroup of power settings. This parameter can be one of the following values defined in WinNT.h. Use NO_SUBGROUP_GUID to refer to the default power scheme. TABLE 1 Value Meaning NO_SUBGROUP_GUID fea3413e-7e05-4911-9a71-700331f1c294 Settings in this subgroup are part of the default power scheme. GUID_DISK_SUBGROUP 0012ee47-9041-4b5d-9b77-535fba8b1442 Settings in this subgroup control power management configuration of the system's hard disk drives. GUID_SYSTEM_BUTTON_SUBGROUP 4f971e89-eebd-4455-a8de-9e59040e7347 Settings in this subgroup control configuration of the system power buttons. GUID_PROCESSOR_SETTINGS_SUBGROUP 54533251-82be-4824-96c1-47b60b740d00 Settings in this subgroup control configuration of processor power management features. GUID_VIDEO_SUBGROUP 7516b95f-f776-4464-8c53-06167f40cc99 Settings in this subgroup control configuration of the video power management features. GUID_BATTERY_SUBGROUP e73a048d-bf27-4f12-9731-8b2076e8891f Settings in this subgroup control battery alarm trip points and actions. GUID_SLEEP_SUBGROUP 238C9FA8-0AAD-41ED-83F4-97BE242C8F20 Settings in this subgroup control system sleep settings. GUID_PCIEXPRESS_SETTINGS_SUBGROUP 501a4d13-42af-4429-9fd1-a8218c268e20 Settings in this subgroup control PCI Express settings. PowerSettingGuid The identifier of the power setting. AcValueIndex A pointer to a variable that receives the AC value index. Return value Returns ERROR_SUCCESS (zero) if the call was successful, and a nonzero value if the call failed. } function PowerReadACValueIndex(RootPowerKey: HKEY; const SchemeGuid: TGUID; const SubGroupOfPowerSettingsGuid: TGUID; const PowerSettingGuid: TGUID; AcValueIndex: LPDWORD): DWORD; stdcall; external 'PowrProf.dll'; const USBSetting: TGUID = '{2a737441-1930-4402-8d77-b2bebba308a3}'; // # USB settings USBSelectiveSuspendSetting: TGUID = '{48e6b7a6-50f5-4782-a5d4-53bb8f07e226}'; // # USB selective suspend setting var pActivePolicyGuid: PGUID; Return : DWORD; Buffer: PWideChar; BufferSize: DWORD; AcValueIndex: DWORD; begin try pActivePolicyGuid := nil; Return := PowerGetActiveScheme(0, pActivePolicyGuid); if Return = ERROR_SUCCESS then begin Return := PowerReadDescription(0, pActivePolicyGuid^, USBSetting, USBSelectiveSuspendSetting, nil, @BufferSize); if Return = ERROR_SUCCESS then begin GetMem(Buffer, BufferSize); Return := PowerReadDescription(0, pActivePolicyGuid^, USBSetting, USBSelectiveSuspendSetting, Pointer(Buffer), @BufferSize); if Return = ERROR_SUCCESS then begin WriteLn('BufferSize: ' + IntToStr(BufferSize)); WriteLn('Beschreibung: ' + Buffer); end; FreeMem(Buffer, BufferSize); end; Return := PowerReadACValueIndex(0, pActivePolicyGuid^, USBSetting, USBSelectiveSuspendSetting, @AcValueIndex); if Return = ERROR_SUCCESS then begin WriteLn('Wert: ' + IntToStr(AcValueIndex)); end; LocalFree(pActivePolicyGuid); end; ReadLn; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. BufferSize: 156 Beschreibung: Geben Sie an, ob selektives USB-Energiesparen aktiviert oder deaktiviert ist. Wert: 1 //edit hatte TOTAL TiGüs code vergessen einzubauen. Nun klappt auch bei mir alles. |
AW: Abfragen der Eigenschaften eines Energieschemas
Zitat:
Wie ich weiter oben erwähnte, standen wir vor einer ähnlichen Herausforderung. Ich habe dir in PasteBin einen Auszug aus meinen PowerShell-Skript gepostet: https://pastebin.com/ba1hbyf6 Ist vielleicht ein guter Starting Point, um es auf deine Bedürfnisse anzupassen. Die deutschen Kommentare sind aus unserer Anleitung, die wir davor benutzt haben und damit man die Einstellung in der normalen Windows-Oberfläche wiederfindet. Da hier zum Großteil nur stumpf mit der powercfg.exe geredet wird, ist eine Umsetzung mit der Windows-Batch-Skriptsprache grundsätzlich möglich, wenn gewünscht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz