使用vs c++语言shutdowns无法关机是怎么回事

img


感觉代码写得没问题,但是在visual studio上运行的时候说“shutdown-s-t3”不是内部或外部命令,也不是可运行程序或批处理文件,exe形式运行时也不能关机,求帮看看是怎么回事,感谢!

【以下回答由 GPT 生成】

在使用Visual Studio的C++语言编写代码实现关机的功能时,出现"shutdown -s -t 3"不是内部或外部命令的错误,以及即使编译为可执行文件也无法成功关机的问题。这个问题的原因是shutdown命令不是标准C++库的一部分,而是一个操作系统的命令行工具。

解决这个问题的方法是使用WinAPI函数来实现关机功能。下面是一个实现关机的示例代码:

#include <iostream>
#include <windows.h>

using namespace std;

// 自定义关机函数
void Shutdown()
{
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;

    // 获取当前进程的访问令牌
    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    {
        cout << "无法获取访问令牌,无法实现关机!" << endl;
        return;
    }

    // 获取关机权限
    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);

    // 关闭访问令牌句柄
    CloseHandle(hToken);

    // 立即关机
    if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, SHTDN_REASON_MAJOR_OTHER))
    {
        cout << "无法关机,可能是由于权限不足!" << endl;
        return;
    }
}

int main()
{
    cout << "Hello World!";

    // 调用关机函数
    Shutdown();

    return 0;
}

这段代码通过调用Windows API函数来实现关机功能。首先,使用OpenProcessToken函数获取当前进程的访问令牌,然后使用LookupPrivilegeValue函数获取关机权限。接下来,使用AdjustTokenPrivileges函数在当前进程中启用关机权限。最后,使用ExitWindowsEx函数执行关机操作。

请注意,该代码需要以管理员权限运行才能成功关机。如果你是以普通用户权限运行的话,会提示没有权限的错误。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

加上空格看看 shutdown -s- t:3

 shutdown                      -s                     -t            3