C语言里有能实现关机的函数吗

已举报 回答
C语言里有能实现关机的函数吗
问在线客服
扫码问在线客服

如果有,包含在哪个头文件中

  • 回答数

    5

  • 浏览数

    5,501

5个回答 默认排序
  • 默认排序
  • 按时间排序

已采纳

C语言中实现关机的代码如下

#include stdlib.h
int main()
{
system(shutdown -s -f -t 0);
return 0;
}

   system是标准库的一个函数,用来执行一些外部命令。。

  这里shutdown 其实是DOS命令,这里通过system调用它便可关机,而不用那繁杂的 API 。

  shutdown 还可实现定时关机,比如 at 12:00 shutdown -s -t 0 表示在12:00 关机。

  这个附上一个有交互型的关机小程序。

#include stdlib.h#include windows.h
int main()
{
int iResult = ::MessageBox(NULL,TEXT(确认要关机?),TEXT(关机),MB_OKCANCEL|MB_ICONQUESTION );
if(1 ==iResult )
{
system(shutdown -s -t 0);
}
return 0;
}
取消 评论
你可以包含stdlib.h头文件
然后用system(shutdown -s -t 1);函数直接用DOS命令控制关机
取消 评论
可以去百度system函数,那里有很详细的代码。
取消 评论
如果是Windows 95/98直接调用ExitWindowsEx()就可以了。
但是现在有麻烦了,NT/2000/XP直接调用ExitWindowsEx()都不行。还要先为调用ExitWindowsEx()的进程获取权限。
以下是MS提供的例子:

#include windows.h

BOOL MySystemShutdown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;

// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );

// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);

if (GetLastError() != ERROR_SUCCESS) return FALSE;

// Shut down the system and force all applications to close.
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,
SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
SHTDN_REASON_MINOR_UPGRADE |
SHTDN_REASON_FLAG_PLANNED)) return FALSE;
else return TRUE;
}

ExitWindowsEx的第一个参数可以是EWX_LOGOFF,EWX_REBOOT,EWX_FORCE,EWX_POWEROFF,EWX_SHUTDOWN等。
第二个参数是原因代码。

涉及到的API, ExitWindowsEx()在User32.dll中,GetCurrentProcess(),GetLastError() 在Kernel32.dll中,其余在 AdvApi32.dll中。
取消 评论
用DOS命令 shutdown
取消 评论
ZOL问答 > C语言里有能实现关机的函数吗

举报

感谢您为社区的和谐贡献力量请选择举报类型

举报成功

经过核实后将会做出处理
感谢您为社区和谐做出贡献

扫码参与新品0元试用
晒单、顶楼豪礼等你拿

扫一扫,关注我们
提示

确定要取消此次报名,退出该活动?