如何用BCB控制电脑强行关机?

aivinok 2003-05-27 09:05:42
如何用BCB控制电脑强行关机?
有程序吗?写下来看看..急.
...全文
118 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
aivinok 2003-05-30
  • 打赏
  • 举报
回复
我有一个问题:我现在学C++builder有2个月了。我发现学这个工具的书籍很少。和以后的发展。。请问要不要转学其它工具?例如delpi 或C#
thingking 2003-05-29
  • 打赏
  • 举报
回复
呵呵
godtorch 2003-05-28
  • 打赏
  • 举报
回复
GZ
dolphin2001 2003-05-28
  • 打赏
  • 举报
回复
察看MSDN,里面讲的好详细
zywx 2003-05-27
  • 打赏
  • 举报
回复
DateTimeToStr(DateTimePicker4->DateTime)==DateTimeToStr(Now()

不准确,计算机很容易错过这个时间,最好有个范围
aivinok 2003-05-27
  • 打赏
  • 举报
回复
//我写的这个,看那里有问题
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
CheckBox1->Checked=false;
//初始设置为不可访问
CheckBox1->Enabled=false;
DateTimePicker4->DateTime=Now();
DateTimePicker3->DateTime=Now();
DateTimePicker2->DateTime=Now();
//用系统时间初始化组件
DateTimePicker1->DateTime=Now();

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
DateTimePicker2->DateTime=Now();
//接收当前日期和时间,用于即时显示
DateTimePicker1->DateTime=Now();
//随时检测设定的关机日期和时间是否有效
if(DateTimePicker4->DateTime < Now())
{
CheckBox1->Checked=false;
//无效时不可访问
CheckBox1->Enabled=false;
}
else
CheckBox1->Enabled=true; //有效时可以访问
if(CheckBox1->Checked==true&&DateTimeToStr(DateTimePicker4->DateTime)==DateTimeToStr(Now()))
{//判断定时关机条件是否满足
//DWORD tmp;
//调用Win API函数关闭计算机
//ExitWindowsEx(EWX_SHUTDOWN,tmp);
//UINT flags;
//flags=EWX_FORCE;
//DWORD tmp;
//ExitWindowsEx(EWX_SHUTDOWN,tmp);
// ExitWindowsEx(EWX_POWEROFF,0);
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if(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_POWEROFF,0);
//Timer1->Enabled=false;
}


}
TDateTime presetDateTime,currentDateTime;
presetDateTime=DateTimePicker3->DateTime;
currentDateTime=Now();
//得到时间差(秒数)
Edit1->Text=int((presetDateTime.Val-currentDateTime.Val)*60*60*24);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::DateTimePicker3Change(TObject *Sender)
{
DateTimePicker4->DateTime=DateTimePicker3->DateTime;
//检测设置的日期是否有效
if(DateTimePicker4->DateTime < Now())
{
CheckBox1->Checked=false;
CheckBox1->Enabled=false;
}
else
CheckBox1->Enabled=true;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::DateTimePicker4Change(TObject *Sender)
{
DateTimePicker3->DateTime=DateTimePicker4->DateTime;
//检测设置的时间是否有效
if(DateTimePicker3->DateTime < Now())
{
CheckBox1->Checked=false;
CheckBox1->Enabled=false;
}
else
CheckBox1->Enabled=true;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD tmp;
ExitWindowsEx(EWX_SHUTDOWN,tmp);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if(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_POWEROFF,0);
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
DWORD tmp;
ExitWindowsEx(EWX_LOGOFF,tmp);

}
//---------------------------------------------------------------------------



zywx 2003-05-27
  • 打赏
  • 举报
回复
sorry 还有把第一句去掉,呵呵,太马虎了
zywx 2003-05-27
  • 打赏
  • 举报
回复
sorry

ExitWindowsEx(1 | EWX_FORCE, 0); 改为
ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0);
zywx 2003-05-27
  • 打赏
  • 举报
回复
试一试这个吧 98 2000通用


OnCloseQuery=NULL;
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);
ExitWindowsEx(1 | EWX_FORCE, 0);
break;
ziyue 2003-05-27
  • 打赏
  • 举报
回复
直接关掉进程就行了。。
aivinok 2003-05-27
  • 打赏
  • 举报
回复
csuzz(陈靖仇) 你的程序也是运行后没有反应的.
aivinok 2003-05-27
  • 打赏
  • 举报
回复
注消
DWORD tmp;
ExitWindowsEx(EWX_LOGOFF,tmp);

上面这个运行成功了.....但是,还有关机和重启的怎么运行不成功呀?
csuzz 2003-05-27
  • 打赏
  • 举报
回复
2K,xp下要取得权限

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
switch (RadioGroup1->ItemIndex)
{
case 0 :
ExitWindowsEx(EWX_LOGOFF, 0);break;
case 1 :
if (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|EWX_POWEROFF, 0);
}
break;
case 2 :
if (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);
}

}



}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
switch (RadioGroup1->ItemIndex)
{
case 0 :
Label2->Caption="结束回话,在完全耗电状态下运行计算机。";break;
case 1 :
Label2->Caption="结束回话并关闭Windows。这样就可以安全的关掉电源了";break;
case 2 :
Label2->Caption="结束回话,关闭Windows,重新启动Windows。";

}
}
aivinok 2003-05-27
  • 打赏
  • 举报
回复
我是这样子的,但是也不行.没有反应.
DWORD tmp;
ExitWindowsEx(EWX_SHUTDOWN,tmp);
编译失败 2003-05-27
  • 打赏
  • 举报
回复
關机
DWORD tmp;
ExitWindowsEx(EWX_SHUTDOWN,tmp);
重起
DWORD tmp;
ExitWindowsEx(EWX_REBOOT,tmp);
注消
DWORD tmp;
ExitWindowsEx(EWX_LOGOFF,tmp);
aivinok 2003-05-27
  • 打赏
  • 举报
回复

DWORD tmp;
//调用Win API函数关闭计算机
ExitWindowsEx(EWX_SHUTDOWN,tmp);
这样子怎么不行?
wangjin0325 2003-05-27
  • 打赏
  • 举报
回复
void_fastcall TForm1::Button1Click(TObject*Sender)
{
UINT flags;
flags=EWX_SHUTDOWN;
ExitWindowsEx(flags,0);
}

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧