power management ändern

AckiB

Mitglied
hallo,
ich habe ein Notebook mit Win7...
wenn ich den Deckel schließe schaltet es in den Energiesparmodus...
ich möchte aber ein Programm haben, das dies abschaltet, so dass der Rechner normal weiterläuft...

ich versuche dies wie so:
Code:
  GLOBAL_POWER_POLICY pGlobalPowerPolicy;
  POWER_POLICY pPowerPolicy;
  GetCurrentPowerPolicies(&pGlobalPowerPolicy, &pPowerPolicy);
  GLOBAL_POWER_POLICY newGlobalPowerPolicy = pGlobalPowerPolicy;
  newGlobalPowerPolicy.user.LidCloseAc.Action = PowerActionNone;
  newGlobalPowerPolicy.user.LidCloseDc.Action = PowerActionNone;
  WriteGlobalPwrPolicy(&newGlobalPowerPolicy);

das hat aber keinen Effekt, der Rechner geht immer noch in den Energiesparmodus! :eek:
kann mir da bitte jemand helfen?

danke, Acki
 
Ändere doch einfach die Einstellungen:
Systemsteuerung -> Hardware und Sound -> Energieoptionen -> Energiesparplaneinstellungen bearbeiten -> Erweiterte Energieeinstellungen ändern

Was hast du denn für einen Rechner?

/EDIT: Gibt es irgendwelche Fehler? Prüfe mal am Ende des Programmes die Einstellungen mit PowerEnumerate(). Der Success-Return ist bei WriteGlobalPowerPolicy() non-zero. Was wird zurückgegeben?

Gruss
cwriter
 
Zuletzt bearbeitet:
hallo,
danke für deine schnelle Antwort :)

Ändere doch einfach die Einstellungen:
Systemsteuerung -> Hardware und Sound -> Energieoptionen -> Energiesparplaneinstellungen bearbeiten -> Erweiterte Energieeinstellungen ändern
darum geht's ja, ich will nicht jedesmal wenn ich das Programm starte in der Systemsteuerung die Einstellung ändern und nach beenden des Progs wieder in die Systemsteuerung und die Einstellung zurücksetzen, das soll das Prog selbstständig machen... ;)

Was hast du denn für einen Rechner?
Packard Bell EasyNote TM mit Win7 home premium.

Gibt es irgendwelche Fehler? Prüfe mal am Ende des Programmes die Einstellungen mit PowerEnumerate(). Der Success-Return ist bei WriteGlobalPowerPolicy() non-zero. Was wird zurückgegeben?
WriteGlobalPowerPolicy() gibt 1 zurück, sollte also ok sein...

ich denke auch, dass das die richtige Funktion ist, denn wenn ich LidCloseAc.Action auslese ist der Wert 1...
und wenn ich in der Systemsteuerung dann den Wert ändere (auf "nichts machen") ist der Wert von LidCloseAc.Action 0, also deaktiviert...
 
Zuletzt bearbeitet:
Der Doppelpost sei in diesem Falle verziehen
Doppelpost ?
hab' ich da was übersehen ?!
wenn ja, dann sorry... :-(

also, ich hab's endlich hinbekommen! :)
mit dieser Klasse klappt's jetzt:

header
Code:
#ifndef cPowerManager_H
#define cPowerManager_H

#include <windows.h>
#include <powrprof.h>

struct OldSettings{
	POWER_ACTION m_lidCloseAc;
	POWER_ACTION m_lidCloseDc;
};

enum LidClose{
	LID_DO_NOTHING = 0,
	LID_STAND_BY
};

class cPowerManager{
  private:
    SYSTEM_POWER_STATUS m_battery;
    GLOBAL_POWER_POLICY m_policy;
    OldSettings m_oldSettings;
    UINT m_schemeID;

  public:
    cPowerManager();
    ~cPowerManager();
    void SetLidCloseAction(int action);

};

#endif // cPowerManager_H

code
Code:
#include "cPowerManager.h"

cPowerManager::cPowerManager(){
	// Get the default scheme.
	GetActivePwrScheme(&m_schemeID);
	ReadGlobalPwrPolicy(&m_policy);

	// Set some default vars.
	m_oldSettings.m_lidCloseAc = m_policy.user.LidCloseAc.Action;
	m_oldSettings.m_lidCloseDc = m_policy.user.LidCloseDc.Action;

	SetLidCloseAction(LID_DO_NOTHING);
}

cPowerManager::~cPowerManager(){
	m_policy.user.LidCloseAc.Action = m_oldSettings.m_lidCloseAc;
	m_policy.user.LidCloseDc.Action = m_oldSettings.m_lidCloseDc;

	WriteGlobalPwrPolicy(&m_policy);
	SetActivePwrScheme(m_schemeID, &m_policy, NULL);
}

void cPowerManager::SetLidCloseAction(int action){
	if (action == LID_DO_NOTHING){
		m_policy.user.LidCloseAc.Action = PowerActionNone;
		m_policy.user.LidCloseDc.Action = PowerActionNone;
	}
	else if (action == LID_STAND_BY){
		m_policy.user.LidCloseAc.Action = PowerActionSleep;
		m_policy.user.LidCloseDc.Action = PowerActionSleep;
	}

	WriteGlobalPwrPolicy(&m_policy);
	SetActivePwrScheme(m_schemeID, &m_policy, NULL);
}

vielleicht ist's ja für jemand anderes auch noch nützlich... ;)

thx, Acki
 
Zurück