您的位置:首页 > 其它

让机器进入待机或休眠状态

2008-08-04 06:24 796 查看


系统待机 / 休眠

----------------------------------------------------------------------------------------------
DECLARE Long SetSuspendState IN PowrProf ;
Long Hibernate, Long ForceCritical, Long DisableWakeEvent
SetSuspendState( 0, 0, 0 )

三个参数的含义如下:
Hibernate     - 0 / 1: 0 - 进入待机状态, 1 - 进入休眠状态
ForceCritical    - 0 / 1: 0 - 不强行终止运行中的进程 / 强行终止
DisableWakeEvent - 0 / 1: 0 - 允许系统事件唤醒计算机 / 不允许

这个 dll 中也包含了用于检索系统电源能力的函数,其中有三个是:
IsPwrHibernateAllowed, IsPwrShutdownAllowed, IsPwrSuspendAllowed,看名字就知道是查什么的了,都不需要参数,但 MS 建议不要使用它们,以后的操作系统可能不再支持,建议使用 GetPwrCapabilities 来替代,这个函数的原型是:
BOOLEAN WINAPI GetPwrCapabilities(
__out PSYSTEM_POWER_CAPABILITIES lpSystemPowerCapabilities
);
其中用到的 SYSTEM_POWER_CAPABILITIES 结构定义为:

typedef struct {
BOOLEAN PowerButtonPresent;
BOOLEAN SleepButtonPresent;
BOOLEAN LidPresent;
BOOLEAN SystemS1;
BOOLEAN SystemS2;
BOOLEAN SystemS3;
BOOLEAN SystemS4;
BOOLEAN SystemS5;
BOOLEAN HiberFilePresent;
BOOLEAN FullWake;
BOOLEAN VideoDimPresent;
BOOLEAN ApmPresent;
BOOLEAN UpsPresent;
BOOLEAN ThermalControl;
BOOLEAN ProcessorThrottle;
BYTE ProcessorMinThrottle;
BYTE ProcessorMaxThrottle;
BOOLEAN FastSystemS4;
BYTE spare2[3];
BOOLEAN DiskSpinDown;
BYTE spare3[8];
BOOLEAN SystemBatteriesPresent;
BOOLEAN BatteriesAreShortTerm;
BATTERY_REPORTING_SCALE BatteryScale[3];
SYSTEM_POWER_STATE AcOnLineWake;
SYSTEM_POWER_STATE SoftLidWake;
SYSTEM_POWER_STATE RtcWake;
SYSTEM_POWER_STATE MinDeviceWakeState;
SYSTEM_POWER_STATE DefaultLowLatencyWake;
} SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
其中的 HiberFilePresent 成员就代表了系统已启动了休眠功能,而是否支持这些功能就要看其中的几个 SystemSx 成员的值,例如:
支持待机(SystrmS1-3),支持休眠(S4),支持软件关机(S5)

所以要判断是否已启用了休眠支持,可以这样写:

DECLARE Long GetPwrCapabilities IN PowrProf String @ lpSystemPowerCapabilities

m.cSysPwrCap = REPLICATE( CHR(0), 128 )
GetPwrCapabilities( @ m.cSysPwrCap )

RETURN ( 0 != CTOBIN( SUBSTR( m.cSysPwrCap, 9, 1 ), '1rs' ))
至于软关机嘛,对 ExitWindowsEx 函数的介绍实在是太多了,随处可见,不用多写。唯一要注意的就是在基于 NT 内核(NT,2000,XP,Vista)的系统中,调用进程必须拥有 SE_SHUTDOWN_NAME 权限, 这可以通过 AdjustTokenPrivileges 函数来设置。

打开/关闭监视器
----------------------------------------------------------------------------------------------
DECLARE Long SendMessage IN WIN32API Long, Long, Long, Long
SendMessage( _vfp.hWnd, 0x112, 0xf170, 1 ) && 关闭监视器
INKEY(0)
SendMessage( _vfp.hWnd, 0x112, 0xf170, -1 ) && 打开监视器

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: