C语言自动待机程序,关机 、待机和休眠编程

程序中主要使用了InitiateSystemShutdown()这个函数。

ffffff>

CString CPage1::ShowError()

{

LPVOID lpMsgBuf;

::FormatMessage(

FORMAT_MESSAGE_ALLOCATE_BUFFER |

FORMAT_MESSAGE_FROM_SYSTEM |

FORMAT_MESSAGE_IGNORE_INSERTS,

NULL,

::GetLastError(),

MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language

(LPTSTR) &lpMsgBuf,

0,

NULL

);

CString strMsg((LPCTSTR)lpMsgBuf);

::LocalFree( lpMsgBuf );

return strMsg;

}

关机:

void CPage1::OnShutdown()

{

GetDlgItem(IDC_STATE)->SetWindowText(“正在试图关闭计算机,请稍候…”);

static HANDLE hToken;

static TOKEN_PRIVILEGES tp;

static 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);

}

UpdateData(true);

CString str;

str.Format(“\\\\%s”,m_strName);

if(!::InitiateSystemShutdown(

(LPTSTR)(LPCTSTR)str,

“\n不好意思,我要关机了!”,

m_nTime,

m_bAlert==0?true:false,

m_nType==0?false:true

))

{

GetDlgItem(IDC_STATE)->SetWindowText(this->ShowError());

}

else

GetDlgItem(IDC_STATE)->SetWindowText(“关机成功”);

}

取消关机:

void CPage1::OnAbort()

{

GetDlgItem(IDC_STATE)->SetWindowText(“正在试图取消关机操作,请稍候…”);

UpdateData(true);

CString str;

str.Format(“\\\\%s”,m_strName);

if(!::AbortSystemShutdown((LPTSTR)(LPCTSTR)str))

{

GetDlgItem(IDC_STATE)->SetWindowText(this->ShowError());

}

else

GetDlgItem(IDC_STATE)->SetWindowText(“取消成功”);

}

休眠:

void CPage1::OnXiu()

{

if(MessageBox(“确实要休眠吗?”,”关机程序”,MB_YESNO|MB_DEFBUTTON2|MB_ICONQUESTION)==IDYES)

{

static HANDLE hToken;

static TOKEN_PRIVILEGES tp;

static 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(false,true);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,它是STMicroelectronics公司推出的一款低功耗、高性能的单片机。下面是一些关于STM32F103C8T6的重要特性和使用方法: 1. 特性: - 内核:ARM Cortex-M3,工作频率为72MHz。 - 存储器:64KB闪存和20KB SRAM。 - 外设:包括多个通用定时器、串行通信接口(USART、SPI、I2C)、模拟数字转换器(ADC)、通用输入输出(GPIO)等。 - 电源管理:支持多种低功耗模式,包括待机模式、休眠模式和停机模式。 - 调试接口:支持JTAG和SWD调试接口。 2. 开发环境: - STM32CubeIDE:ST官方提供的集成开发环境,支持代码编辑、编译、调试和固件下载等功能。 - Keil MDK:一款常用的ARM开发工具,提供了完整的开发环境和调试功能。 - STM32CubeMX:ST官方提供的配置工具,可用于生成初始化代码和配置外设。 3. 编程语言: - C语言:STM32F103C8T6通常使用C语言进行编程,开发者可以使用标准C库和STM32的外设库进行开发。 - 汇编语言:对于一些特殊需求,也可以使用汇编语言进行编程。 4. 开发步骤: - 配置开发环境:安装相应的开发工具,如STM32CubeIDE或Keil MDK。 - 创建项目:使用开发工具创建一个新的STM32项目,并选择正确的目标芯片型号。 - 配置引脚和外设:使用STM32CubeMX配置工具选择需要使用的外设和引脚,并生成初始化代码。 - 编写代码:在生成的初始化代码的基础上,编写自己的应用程序代码。 - 编译和下载:编译代码并将固件下载到STM32F103C8T6微控制器中。 - 调试和测试:使用调试工具对代码进行调试,并进行功能测试和性能优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值