reboot.exe的制作过程

本文介绍了reboot.exe的制作过程,使用Visual C++.NET 2003编程,程序具备关闭、重启计算机和注销当前用户的功能。详细步骤包括新建MFC工程、定制基于对话框的应用程序类型、布置程序界面、添加变量以及添加实现相应功能的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

reboot.exe的制作过程

 

 

编程工具:Visual C++.NET 2003

程序员:黄江斌

程序功能:关闭、重启计算机、注销当前用户。

开发时间:2005827

 

 

1、新建工程。

文件 -> 新建 -> 项目,从中选择MFC(MFC应用程序),输入工程名Reboot

 

2、定制应用程序类型。

应用程序类型:基于对话框。

其它设置按默认。

 

3、布置程序界面。

       添加的控件有

      

控件

ID

Caption

其它属性

Static Box

IDC_STATIC

 

 

Radio Box 1

IDC_OPTYPE

关闭计算机

Group = True

Radio Box 2

IDC_RADIO2

重新启动

 

Radio Box 3

IDC_RADIO3

立即关闭

 

Radio Box 4

IDC_RADIO4

注销当前用户

 

Button1

IDC_BTNOK

确定

 

Button2

IDC_BTNCANCEL

取消

 

 

       界面如下图:

      

4、添加变量。

       CrebootDlg类中添加m_nOpType变量(控件变量、IDC_OPTYPEValueBOOL)。

5、添加代码。

void CRebootDlg::OnBnClickedBtnok()

{

     // TODO: 在此添加控件通知处理程序代码

     HANDLE hToken;

     TOKEN_PRIVILEGES tkp;

     DWORD dwVersion;

 

     //得到Windows NTWin32的版本号

     dwVersion = GetVersion();

 

     UpdateData( TRUE );

     switch( m_nOpType )

     {

     case 0:

         //关闭计算机

         if( dwVersion < 0x080000000 )

         {

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

              ExitWindowsEx( EWX_SHUTDOWN , 0 );

         }

         else

         {

              ExitWindowsEx( EWX_SHUTDOWN , 0 );

         }       

         break;

     case 1:

         //重启计算机

         if( dwVersion < 0x080000000 )

         {

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

              ExitWindowsEx( EWX_REBOOT , 0 );

         }

         else

         {

              ExitWindowsEx( EWX_REBOOT , 0 );

         }

         break;

     case 2:

         //重启计算机

         if( dwVersion < 0x080000000 )

         {

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

              ExitWindowsEx( EWX_REBOOT | EWX_FORCE , 0 );

         }

         else

         {

              ExitWindowsEx( EWX_REBOOT | EWX_FORCE , 0 );

         }       

         break;

     case 3:

         //注销当前用户

         ExitWindowsEx( EWX_LOGOFF , 0 );

         break;

     }

     SendMessage( WM_CLOSE , 0 , 0 );

}

 

void CRebootDlg::OnBnClickedBtncancel()

{

     // TODO: 在此添加控件通知处理程序代码   SendMessage( WM_CLOSE , 0 , 0 );

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值