Ten kod jednak tylko przechwytuje informacje o przejściu w stan uśpienia, a Tobie chodziło chyba o zmianę ustawień schematu zasilania?!
Corvis napisał(a):Wie ktoś jak można z poziomu programu zrobić następujące rzeczy: (W przypadku laptopów)
1. Wyłączyć przejście w tryb uśpienia
2. Wyłączyć wyłączenie ekranu
Poszukiwałem jakichś informacji i udało mi się ustalić, że należy pozmieniać wpisy rejestru, chyba w tym kluczu:
HKEY_CURRENT_USER\Control Panel\PowerCfg\GlobalPowerPolicy. W trakcie poszukiwań natknąłem się na funkcję
PowerCreateSetting:
DWORD WINAPI PowerCreateSetting(
HKEY RootSystemPowerKey,
const GUID* SubGroupOfPowerSettingsGuid,
const GUID* PowerSettingGuid );
Niestety, o ile pierwszy parametr to
NULL, drugi to jedna z możliwości:
NO_SUBGROUP_GUID
fea3413e-7e05-4911-9a71-700331f1c294 Settings in this subgroup will be 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.
Trzecia argument jest nieznany, wiadomo tylko, że reprezentuje pojedyncze ustawienia tworzonego schematu zasilania.
Użycie tej funkcji wymaga włączenia do projektu biblioteki
PowrProf.h.. Z opisu zaś wynika, że jest ona zgodna dopiero z systemem
Vista.
Inną funkcją, która działa prawdopodobnie zarówno w systemie WinXP jak i nowszych jest
SetActivePwrScheme:
BOOLEAN SetActivePwrScheme(
UINT uiID,
PGLOBAL_POWER_POLICY lpGlobalPowerPolicy,
PPOWER_POLICY lpPowerPolicy );
Kombinowałem coś takiego:
GLOBAL_POWER_POLICY GlobalPowerPolicy;
UINT uiID;
POWER_POLICY pwrScheme;
if( !GetCurrentPowerPolicies(&GlobalPowerPolicy, &pwrScheme) )
{
ShowMessage("Błąd");
return;
}
GlobalPowerPolicy.user.PowerButtonAc.Action = PowerActionShutdown;
WriteGlobalPwrPolicy(&GlobalPowerPolicy);
GetActivePwrScheme(&uiID);
ReadPwrScheme(uiID, &pwrScheme);
SetActivePwrScheme(uiID, &GlobalPowerPolicy, &pwrScheme);
ale niczego to nie zmienia. Pomoc środowiska Embarcadero jest w tej kwestii bardzo uboga, w zasadzie niczego nie wyjaśnia.