C++ 不让计算机休眠

最近由于弄多串口下的多线程通信,有232口和USB转串口,当电脑进入睡眠状态,再次唤醒的时候电脑要加载USB转串口驱动,这样,其中一个线程总是得不得数据,下面是不让计算机进入睡眠的代码。 在笔记本下应该获得注册表权限。台式机下面的注册表的键名和笔记本下的键名不一样。下面是台式机的。
图片
 

图片

图片

#include "stdafx.h"
#include <atlstr.h>
#include <windows.h>
#include <iostream>
#include <winsock2.h>
#include <PowrProf.h>
#pragma comment(lib, "User32.lib")
#pragma comment(lib, "Kernel32.lib")
#pragma comment(lib, "PowrProf.lib")
#pragma comment(lib, "Advapi32.lib")
#pragma warning(disable : 4996)
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
if (!SystemParametersInfo(SPI_SETSCREENSAVESECURE, false, NULL, SPIF_SENDCHANGE)){
DWORD dwError = GetLastError();
char sError[MAX_PATH] = {0};
ltoa(dwError, sError, 10);
string strError;
strError += "错误: ";
strError += sError;
::MessageBoxA(NULL, strError.c_str(), "错误", MB_OK);
return 0;
}
DWORD dwTime = 9999 * 60;
if (!SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, dwTime, NULL, SPIF_SENDCHANGE)){
DWORD dwError = GetLastError();
char sError[MAX_PATH] = {0};
_ltoa_s(dwError, sError, 10);
string strError;
strError += "错误: ";
strError += sError;
::MessageBoxA(NULL, strError.c_str(), "错误", MB_OK);
return 0;
}

if (IsPwrSuspendAllowed()){
HKEY hKey = NULL;
if(::RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Control\\Power\\User\\PowerSchemes\\381b4222-f694-41f0-9685-ff5bb260df2e", 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS){
::MessageBoxA(NULL, "打开注册表失败", "警告", MB_OK);
RegCloseKey(hKey);
return 0;
}
DWORD dwType = REG_DWORD;
byte btData[MAX_PATH] = {0};
DWORD dwData = sizeof(DWORD);//DWORD的长度是4,必须为4

if (ERROR_SUCCESS != ::RegSetKeyValueA(hKey, "238c9fa8-0aad-41ed-83f4-97be242c8f20\\29f6c1db-86da-48c5-9fdb-f2b67b1f44da", "ACSettingIndex", dwType, btData, dwData)){
::MessageBoxA(NULL, "打开注册表失败", "警告", MB_OK);
RegCloseKey(hKey);
return 0;
}
if (ERROR_SUCCESS != ::RegSetKeyValueA(hKey, "7516b95f-f776-4464-8c53-06167f40cc99\\3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e", "ACSettingIndex", dwType, btData, dwData)){
::MessageBoxA(NULL, "打开注册表失败", "警告", MB_OK);
RegCloseKey(hKey);
return 0;
}
RegCloseKey(hKey);
}

return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值