VC++实现电脑睡眠/休眠/锁定/关闭屏幕

实现休眠/睡眠,调用进程必须具有 SE_SHUTDOWN_NAME 特权
获取特权

HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID luid;
if(::OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
{
	::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
	tp.PrivilegeCount=1;
	tp.Privileges[0].Luid =luid;
	tp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED;
	::AdjustTokenPrivileges(hToken,false,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
}

使用SetSystemPowerState函数实现睡眠/休眠

BOOL SetSystemPowerState(
  [in] BOOL fSuspend,
  [in] BOOL fForce
);
参数
[in] fSuspend
如果此参数为 TRUE,系统会挂起。 如果参数为 FALSE,则系统休眠。
[in] fForce
此参数不起作用。
返回值
如果电源已挂起并随后还原,则返回值为非零值。
如果系统未挂起,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

头文件:winbase.h (包括 Windows.h)
Library: Kernel32.lib
DLL: Kernel32.dll

#include <winbase.h>
#pragma comment(lib, "Kernel32.lib")

为 Windows Vista 和更高版本编写的应用程序应改用 SetSuspendState

BOOLEAN SetSuspendState(
  [in] BOOLEAN bHibernate,
  [in] BOOLEAN bForce,
  [in] BOOLEAN bWakeupEventsDisabled
);
参数
[in] bHibernate
如果此参数为 TRUE,则系统休眠。 如果参数为 FALSE,系统会挂起。
[in] bForce
此参数不起作用。
[in] bWakeupEventsDisabled
如果此参数为 TRUE,系统将禁用所有唤醒事件。 如果参数为 FALSE,则保持启用任何系统唤醒事件。
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError

头文件: powrprof.h
Library: PowrProf.lib
DLL: PowrProf.dll

#include "powrprof.h"
#pragma comment(lib, "PowrProf.lib")

锁定屏幕

BOOL LockWorkStation();
返回值
如果该函数成功,则返回值为非零值。 由于函数异步执行,因此非零返回值指示操作已启动。 它不指示工作站是否已成功锁定。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
最低受支持的客户端	Windows XP [桌面应用|UWP 应用]
最低受支持的服务器	Windows Server 2003 [桌面应用|UWP 应用]
目标平台	Windows
标头	winuser.h (包括 Windows.h)
Library	User32.lib
DLL	User32.dll
API 集	ext-ms-win-ntuser-misc-l1-5-1 (在 Windows 10 版本 10.0.14393)

代码示例

#include <windows.h>
#include <stdio.h>

#pragma comment( lib, "user32.lib" )

void main()
{
    // Lock the workstation.

    if( !LockWorkStation() )
        printf ("LockWorkStation failed with %d\n", GetLastError());
}

关闭屏幕

PostMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2);

或者

::SendMessage(::GetDesktopWindow(),WM_SYSCOMMAND,SC_MONITORPOWER,2);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百口可乐__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值