(01)C++ builder之自动关机

(中行雷威2018.3.12)

(同一个世界,同一个梦想,交流学习C++Builder XE10,传承c++builder的魅力!欢迎各地朋友加入我的QQ群484979943,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。如需下载开发工具及源代码请加入我的QQ群)

【阅读倡议】

1、有问题请留言;

2、没问题请点赞;

3、看连载请加群;

4、下源码请加群;

【开发工具】

1、C++Builder10.2.2tokyo


本文介绍如何利用WINDOWS封装的API接口实现定时关机、注销、重启和关电。

一、功能设计

新建C++BuilderApplication项目,在主窗口FormAutoShutdown上放置几个按钮,分别是定时关机、重新启动、注销登录、强制关机。再放一个Timer控件,Timer控件每秒循环一次,判断时间,自动关机。

二、代码实现

1、新定义一个preProcess函数

UnitAutoShutdown.h文件:

//---------------------------------------------------------------------------


#ifndef UnitAutoShutdownH
#define UnitAutoShutdownH
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.Buttons.hpp>
#include <Vcl.ExtCtrls.hpp>


//---------------------------------------------------------------------------
class TFormAutoShutdown : public TForm
{
__published: // IDE-managed Components
TBitBtn *BitBtn1;
TBitBtn *BitBtn2;
TTimer *Timer1;
TImage *Image1;
TEdit *Edit1;
void __fastcall BitBtn1Click(TObject *Sender);
/*自定义*/
void __fastcall preProcess();//关机预处理
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall BitBtn2Click(TObject *Sender);
void __fastcall FormActivate(TObject *Sender);




private: // User declarations
public: // User declarations
__fastcall TFormAutoShutdown(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TFormAutoShutdown *FormAutoShutdown;
//---------------------------------------------------------------------------

#endif



UnitAutoShutdown.cpp文件:

//---------------------------------------------------------------------------


#include <vcl.h>
#pragma hdrstop


int autoShutCount=20;


#include "UnitAutoShutdown.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormAutoShutdown *FormAutoShutdown;
//---------------------------------------------------------------------------
__fastcall TFormAutoShutdown::TFormAutoShutdown(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFormAutoShutdown::BitBtn6Click(TObject *Sender)
{
//重新登录
preProcess();
ExitWindowsEx(EWX_LOGOFF,0);
}


//---------------------------------------------------------------------------
//void __fastcall TFormAutoShutdown::BitBtn5Click(TObject *Sender)
{
//强制关机
preProcess();
ExitWindowsEx(EWX_POWEROFF|EWX_FORCE,0);
}


//---------------------------------------------------------------------------
void __fastcall TFormAutoShutdown::BitBtn1Click(TObject *Sender)
{
//正常关闭
preProcess();
ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0);

}

//---------------------------------------------------------------------------
void __fastcall TFormAutoShutdown::BitBtn1Click(TObject *Sender)
{
//重新启动
preProcess();
ExitWindowsEx(EWX_REBOOT|EWX_FORCE,0);

}


//---------------------------------------------------------------------------


void __fastcall TFormAutoShutdown::preProcess()
{
//关机预处理
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
}

//-----------------------------------------------------------------------------
void __fastcall TFormAutoShutdown::Timer1Timer(TObject *Sender)
{
//定时关机调度
Edit1->Text="警告:您的电脑将在:"+String(autoShutCount--)+" 秒后关机!";
if(autoShutCount==0)
{
BitBtn1->Click();
}
}
//---------------------------------------------------------------------------


void __fastcall TFormAutoShutdown::BitBtn2Click(TObject *Sender)
{
Timer1->Enabled=false;
this->Close();
}
//---------------------------------------------------------------------------


void __fastcall TFormAutoShutdown::FormActivate(TObject *Sender)
{
Timer1->Enabled=true;
}
//---------------------------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值