自动关机的代码,怎么没反映啊

donwmufromdying 2005-12-12 12:15:51
ExitWindowsEx(EWX_SHUTDOWN+EWX_FORCE,0);
是win2000系统
...全文
346 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanren_me 2006-01-04
  • 打赏
  • 举报
回复
#define NO_WIN32_LEAN_AND_MEAN // 调用SHELL API 需包含的
lwqcny 2005-12-12
  • 打赏
  • 举报
回复
来自老妖论坛的代码片断:
void __fastcall TMainForm::Button7Click(TObject *Sender)
{
  HANDLE hToken;
  TOKEN_PRIVILEGES TP;
  //获取当前进程权限令牌
  if(!::OpenProcessToken(::GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken)) {
  ::MessageBox(this->Handle,"您没有关机的权限!","关闭计算机",MB_OK+MB_ICONERROR);
  return;
  }
  ::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&TP.Privileges[0].Luid);
  TP.PrivilegeCount = 1; // one privilege to set
  TP.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  //调整权限
  ::AdjustTokenPrivileges(hToken,false,&TP,sizeof(TP),NULL,0);
  if(::GetLastError() != ERROR_SUCCESS) {
  ::MessageBox(this->Handle,"调整权限失败!","关闭计算机",MB_OK+MB_ICONERROR);
  return;
  }
  //关机函数,参数查阅SDK
  //::ExitWindowsEx(EWX_LOGOFF,NULL);
  //锁定工作站,都不用调整权限,就可以实现
  //LockWorkStation();
  //显示一个对话框,计时关闭系统
  ::InitiateSystemShutdown(NULL,"您无权限使用系统,即将关闭!",30,true,false);
  ::Sleep(5000);
  //取消关机
  ::AbortSystemShutdown(NULL);
}
donwmufromdying 2005-12-12
  • 打赏
  • 举报
回复
谢谢老妖。我看了一个delphi的代码。好像还挺复杂的。不知道能否那过来用
ccrun.com 2005-12-12
  • 打赏
  • 举报
回复
需要先提升本进程的权限。
donwmufromdying 2005-12-12
  • 打赏
  • 举报
回复
怎么报错呢?说TOKEN_PRIVILEGES 没定义!,平时调用winAPI好像不会的阿
donwmufromdying 2005-12-12
  • 打赏
  • 举报
回复
多谢多谢!老妖揭帖接分
califord 2005-12-12
  • 打赏
  • 举报
回复
能不能说具体一点,用什么控件,然后怎么做

1,222

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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