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


系统待机 / 休眠

----------------------------------------------------------------------------------------------
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 )       && 打开监视器



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值