Advertisement

02.12.2008 at 07:17PM PST, ID: 23158586
[x]
Attachment Details
[x]
The Solution Rating System

With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.

  • The Grade of the Solution
  • The Zone Rank of the Expert Providing the Solution
  • The Number of Author and Expert Comments
  • The Number of Experts Contributing
  • The Feedback of the Community

Your Input Matters
Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site.

If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support.

Thank you!

Trying to create standalone executable in C++ with VS2005 to set Power Management properties on Windows 2000, XP, and Vista.
Tags: C++, Windows Executable
I'm trying to create standalone executable in C++ with VS2005to set Power Management properties on Windows 2000, XP, and Vista.

I got some code from here:
http://softwarecommunity.intel.com/articles/eng/2667.htm

But it uses SetCurrentPowerPolicies which is an invalid identifier.  Current code below.

I don't need to use any of this code but I do need this to not be dependent on .NET or any other software that doesn't come with 2000, XP, and Vista by default.

Totally new to C++.  I thinks this would have been done a long time ago if I could use .NET.

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
// IdleTime.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h";
#include "powrprof.h"
 
 
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    double tickCount;
double idleCount;
LASTINPUTINFO lpi;
lpi.cbSize = sizeof(LASTINPUTINFO);
 
if (!GetLastInputInfo(&lpi))
{
// failed, use GetLastError to get error code
}
 
// lpi.dwTime now holds the tick count when last input was made
 
//cout << lpi.dwTime << endl;
tickCount = GetTickCount();
idleCount = ( tickCount - lpi.dwTime );
cout << idleCount / 1000 << endl;
 
//GLOBAL_POWER_POLICY CurrentGP;
//POWER_POLICY CurrentPP;
//UINT id;
//GetActivePwrScheme(&id);                          //capture id of current scheme
//GetCurrentPowerPolicies(&CurrentGP,&CurrentPP);   //get active policies
////if(CanUserWritePwrScheme() == FALSE) {cout << "no";};
 
GLOBAL_POWER_POLICY CurrentGP;
POWER_POLICY CurrentPP;
ULONG savVidAC,savVidDC;
UINT id;
UINT ssav;
 
GetActivePwrScheme(&id);                          //capture id of current scheme
GetCurrentPowerPolicies(&CurrentGP,&CurrentPP);   //get active policies
savVidAC = CurrentPP.user.VideoTimeoutAc;         //save current values
savVidDC = CurrentPP.user.VideoTimeoutDc;
CurrentPP.user.VideoTimeoutAc = 15;                //disallow display shutoff
CurrentPP.user.VideoTimeoutDc = 14;
//set new values.  Not sure how to save values
SetCurrentPowerPolicies(id,CurrentGP,&CurrentPP); //set new values
// get error:  Error	1	error C3861: 'SetCurrentPowerPolicies': identifier not found	
//      c:\Programming\PowerManagement\SetPMSettingsCPlusPlus\IdleTime\IdleTime.cpp	50	
 
//SystemParametersInfo (SPI_GETSCREENSAVETIMEOUT,0,&ssav,0);  //save current value
//SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT,0,NULL,0);    //turn off screen saver
 
	return 0;
}
Start your free trial to view this solution
Question Stats
Zone: Microsoft
Question Asked By: steverey443
Solution Provided By: jkr
Participating Experts: 1
Solution Grade: A
Views: 68
Translate:
Loading Advertisement...
02.12.2008 at 07:52PM PST, ID: 20881508

Rank: Genius

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
02.13.2008 at 12:25PM PST, ID: 20887797

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
02.13.2008 at 12:28PM PST, ID: 20887830

Rank: Genius

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
02.13.2008 at 01:29PM PST, ID: 20888413

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
02.13.2008 at 01:38PM PST, ID: 20888505

Rank: Genius

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
02.13.2008 at 02:16PM PST, ID: 20888932

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
02.13.2008 at 02:20PM PST, ID: 20888960

Rank: Genius

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
02.13.2008 at 03:18PM PST, ID: 20889456

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
02.13.2008 at 04:03PM PST, ID: 20889739

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
Loading Advertisement...
Microsoft
  • Internet Protocols
  • Applications
  • Development
  • OS
  • Hardware
  • Windows Security
Apple
  • Operating Systems
  • Hardware
  • Programming
  • Networking
  • Software
Internet
  • Search Engines
  • File Sharing
  • WebTrends / Stats
  • Spy / Ad Blockers
  • Web Browsers
  • New Net Users
  • Web Development
  • Chat / IM
  • Anti Spam
  • Web Servers
  • Anti-Virus
  • Email Clients
Gamers
  • Tips
  • Online / MMORPG
  • Puzzle
  • Emulators
  • Action / Adventure
  • Role Playing
  • Consoles
  • Game Programming
  • Strategy
  • Sports
  • Misc
  • Computer Games
Digital Living
  • Hardware
  • New Net Users
  • New Users
  • Software
  • Digital Music
  • Gaming World
  • Home Security
  • Apple
  • Networking Hardware
Virus & Spyware
  • Vulnerabilities
  • IDS
  • Encryption
  • Anti-Virus
  • Operating Systems Security
  • Software Firewalls
  • WebApplications
  • Cell Phones
  • Operating Systems
  • Internet
  • Hardware Firewalls
Hardware
  • Handhelds / PDAs
  • Displays / Monitors
  • Components
  • Networking Hardware
  • Peripherals
  • Laptops/Notebooks
  • Storage
  • Servers
  • Desktops
  • New Users
  • Misc
  • Apple
Software
  • System Utilities
  • Industry Specific
  • Network Management
  • Photos / Graphics
  • Page Layout
  • VMWare
  • Misc
  • Web Development
  • OS
  • CYGWIN
  • Voice Recognition
  • Message Queue
  • Quality Assurance
  • Security
  • Firewalls
  • MultiMedia Applications
  • Development
  • Database
  • Office / Productivity
  • Business Management
  • OS/2 Apps
  • Server Software
  • Internet / Email
ITPro
  • OS
  • Storage
  • Encryption
  • Operating Systems Security
  • Apple Hardware
  • Laptops & Notebooks
  • Servers
  • Networking Hardware
  • Peripherals
  • Devices
  • Displays / Monitors
  • WebTrends / Stats
  • Search Engines
  • Firewalls
  • WebApplications
  • IDS
  • Vulnerabilities
  • Email Clients
  • File Sharing
  • Spy / Ad Blockers
  • Web Browsers
  • Web Servers
  • Networking
  • Anti-Virus
  • Chat / IM
  • Anti Spam
Developer
  • Web Servers
  • Web Browsers
  • Game Programming
  • Dev Tools
  • Industry Specific
  • Office / Productivity
  • Database
  • CYGWIN
  • Web Development
  • Search Engines
  • File Sharing
  • WebTrends / Stats
  • Programming
  • Content Management
  • Application Servers
  • Protocols
Storage
  • Removable Backup Media
  • Storage Technology
  • Servers
  • Grid
  • Remote Access
  • Backup / Restore
  • Misc
  • Hard Drives
OS
  • Miscellaneous
  • Security
  • Development
  • Linux
  • VMWare
  • MainFrame OS
  • Unix
  • Apple
  • OS / 2
  • AS / 400
  • BeOS
  • Microsoft
  • VMS / OpenVMS
Database
  • Oracle
  • Miscellaneous
  • MySQL
  • Software
  • Sybase
  • Contact Management
  • PostgreSQL
  • Data Manipulation
  • Clarion
  • InterSystems Cache
  • Siebel
  • MUMPS
  • OLAP
  • SQLBase
  • SAS
  • GIS & GPS
  • 4GL
  • Berkeley DB
  • DB2
  • Informix
  • Interbase / Firebird
  • FoxPro
  • Reporting
  • LDAP
  • Filemaker Pro
  • MS SQL Server
  • dBase
  • MS Access
Security
  • Misc
  • Web Browsers
  • Software Firewalls
  • Operating Systems Security
  • File Sharing
  • Spy / Ad Blockers
  • Vulnerabilities
  • WebApplications
  • IDS
  • Anti-Virus
  • Encryption
  • Anti Spam
  • Email Clients
  • VPN
  • Chat / IM
Programming
  • Editors IDEs
  • Installation
  • Handhelds / PDAs
  • Multimedia Programming
  • System / Kernel
  • Algorithms
  • Game
  • Signal Processing
  • Project Management
  • Open Source
  • Database
  • Misc
  • Languages
  • Processor Platforms
  • Theory
Web Development
  • Scripting
  • Blogs
  • Web Servers
  • Software
  • Search Engines
  • Web Graphics
  • Images
  • Internet Marketing
  • Images and Photos
  • Components
  • Document Imaging
  • Web Languages/Standards
  • Illustration
  • WebApplications
  • Fonts
  • WebTrends / Stats
  • Authoring
  • Digital Camera Software
  • Miscellaneous
Networking
  • Protocols
  • Apple Networking
  • Network Management
  • Message Queue
  • Application Servers
  • Content Management
  • File Servers
  • Email Servers
  • Misc
  • Java Editors & IDEs
  • Wireless
  • Networking Hardware
  • Backup / Restore
  • System Utilities
  • ISPs & Hosting
  • Web Servers
  • Storage Technology
  • Removable Backup Media
  • Servers
  • Broadband
  • Grid
  • OS / 2
  • Novell Netware
  • Unix Networking
  • Windows Networking
  • Security
  • Telecommunications
  • Operating Systems
  • Linux Networking
Other
  • Community Advisor
  • Lounge
  • Community Support
  • New Net Users
  • Philosophy / Religion
  • Math / Science
  • Miscellaneous
  • URLs
  • Expert Lounge
  • Politics
  • Puzzles / Riddles
Community Support
  • Suggestions
  • New to EE
  • New Topics
  • Community Advisor
  • CleanUp
  • Announcements
  • General
  • Feedback
  • Input
  • EE Bugs
 
02.12.2008 at 07:52PM PST, ID: 20881508

Rank: Genius

That seem be a typo  (or whatever) on the Intel side, did you mean to

WriteGlobalPwrPolicy(&CurrentPP);

?
 
02.13.2008 at 12:25PM PST, ID: 20887797
Hi jkr

Getting closer.  This gives the following error.

Error      1      error C2664: 'WriteGlobalPwrPolicy' : cannot convert parameter 1 from 'POWER_POLICY *__w64 ' to 'PGLOBAL_POWER_POLICY'      c:\Programming\PowerManagement\SetPMSettingsCPlusPlus\IdleTime\IdleTime.cpp      50      
Is there a way to write the POWER_POLICY instead of the GLOBAL_POWER_POLICY?  I see the options here:
http://msdn2.microsoft.com/en-us/library/aa373163(VS.85).aspx

But I can't figure out how to save settings after making changes.
 
02.13.2008 at 12:28PM PST, ID: 20887830

Rank: Genius

Sorry, make that
1:
WriteGlobalPwrPolicy(&CurrentGP);
Open in New Window
 
02.13.2008 at 01:29PM PST, ID: 20888413
Thanks jkr.

I tried that but I get the three following errors.  Do I need to add something to my header file?  (New to C++ and am likely to be missing remedial things.)

error LNK2001: unresolved external symbol _GetActivePwrScheme@4
error LNK2001: unresolved external symbol _GetCurrentPowerPolicies@8      
error LNK2001: unresolved external symbol _WriteGlobalPwrPolicy@4
 
02.13.2008 at 01:38PM PST, ID: 20888505

Rank: Genius

You need to link with 'PowrProf.lib'. Just add that to your project using either

#pragma comment(lib,"'PowrProf.lib")

or go to "Project", "Add Existing Item", change the extension to "*.lib", navigate to 'PowrProf.lib and select it.
Accepted Solution
 
02.13.2008 at 02:16PM PST, ID: 20888932
Thanks again for your help.  That worked like a charm.

It looks like I need to use WritePwrScheme instead which I have tried but am it required a PUINT and the ID is returned as a UINT.  Can I convert a UINT to a PUINT?
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
// IdleTime.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h";
#include "powrprof.h"
 
 
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    double tickCount;
double idleCount;
LASTINPUTINFO lpi;
lpi.cbSize = sizeof(LASTINPUTINFO);
 
if (!GetLastInputInfo(&lpi))
{
// failed, use GetLastError to get error code
}
 
// lpi.dwTime now holds the tick count when last input was made
 
//cout << lpi.dwTime << endl;
tickCount = GetTickCount();
idleCount = ( tickCount - lpi.dwTime );
cout << idleCount / 1000 << endl;
 
//GLOBAL_POWER_POLICY CurrentGP;
//POWER_POLICY CurrentPP;
//UINT id;
//GetActivePwrScheme(&id);                          //capture id of current scheme
//GetCurrentPowerPolicies(&CurrentGP,&CurrentPP);   //get active policies
////if(CanUserWritePwrScheme() == FALSE) {cout << "no";};
 
GLOBAL_POWER_POLICY CurrentGP;
POWER_POLICY CurrentPP;
ULONG savVidAC,savVidDC;
UINT id;
//UINT ssav;
 
 
GetActivePwrScheme(&id);                          //capture id of current scheme
GetCurrentPowerPolicies(&CurrentGP,&CurrentPP);   //get active policies
savVidAC = CurrentPP.user.VideoTimeoutAc;         //save current values
savVidDC = CurrentPP.user.VideoTimeoutDc;
 
CurrentPP.user.VideoTimeoutAc = 15;                
CurrentPP.user.VideoTimeoutDc = 14;
//set new values.  Not sure how to save values
WritePwrScheme(id,"test1","test1",&CurrentPP);
WriteGlobalPwrPolicy(&CurrentGP);
 
//SetCurrentPowerPolicies(id,CurrentGP,&CurrentPP); //set new values
// get error:  Error	1	error C3861: 'SetCurrentPowerPolicies': identifier not found	
//      c:\Programming\PowerManagement\SetPMSettingsCPlusPlus\IdleTime\IdleTime.cpp	50	
 
//SystemParametersInfo (SPI_GETSCREENSAVETIMEOUT,0,&ssav,0);  //save current value
//SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT,0,NULL,0);    //turn off screen saver
 
	return 0;
}
Open in New Window
 
02.13.2008 at 02:20PM PST, ID: 20888960

Rank: Genius

A PUINT is the address of an UINT, so '&' should help you, i.e.

WritePwrScheme(&id,"test1","test1",&CurrentPP);
 
02.13.2008 at 03:18PM PST, ID: 20889456
Someone needs to buy a book :)

It runs fine now.

It doesn't work as expected since it sets the values to zero rather than 5 and 6 but it does run and make changes.
CurrentPP.user.VideoTimeoutAc = 5;                
CurrentPP.user.VideoTimeoutDc = 6;

I changed the code to follow another example and get the same results.  
powercfg /query
Field Description          Value
-----------------          -----
...
Turn off monitor (AC)      After 0 mins
Turn off monitor (DC)      After 0 mins
...


If you or anyone has advice on how to set these settings in a way that actually works that would be great.  Thanks for the help getting the code working.  If I don't hear back on a method that works I'll accept your solution since at least you got the example I was trying to use working.

BTW the second example I tried had a downloadable executable that also had the same results of setting the actual Power Management values to 0.
http://www.coises.com/software/monitorsleep.htm






1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
unsigned int ps;
unsigned int timeout;
POWER_POLICY pp;
 
timeout = 5;
 
GetActivePwrScheme(&id);   
ReadPwrScheme(ps, &pp);
pp.user.VideoTimeoutAc = timeout;
SetActivePwrScheme(ps, 0, &pp);
Open in New Window
 
02.13.2008 at 04:03PM PST, ID: 20889739
I was able to get this to work using an example on setting processor throttle and modifying it.
http://softwarecommunity.intel.com/articles/eng/1048.htm

Working code below.  Just need to test on other operating systems now.

Thanks for your help!

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
POWER_POLICY CurrentPowerPolicy;
UINT	psIdx = 0;
 
#define TEST_VALUE_AC   7200
#define TEST_VALUE_DC   7200
 
GetActivePwrScheme(&psIdx); 
ReadPwrScheme(psIdx, &CurrentPowerPolicy);
CurrentPowerPolicy.user.VideoTimeoutAc = TEST_VALUE_AC;
CurrentPowerPolicy.user.VideoTimeoutDc = TEST_VALUE_DC;
WritePwrScheme(&psIdx,NULL,NULL, &CurrentPowerPolicy); 
SetActivePwrScheme(psIdx, NULL, NULL); 
Open in New Window
 
 
20080236-EE-VQP-29 / EE_QW_2_20070628