You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用system()函数的情况下用C语言关闭Windows电脑?

不调用system()实现Windows关机的C语言方案

要实现不依赖system()的Windows关机功能,直接调用Windows原生API是最优选择——相比启动cmd.exe执行shutdown命令,API调用效率更高、可靠性更强,还不会受系统命令行环境的影响。

核心思路

Windows系统提供了专门的关机API,比如InitiateSystemShutdownExW,但使用前需要先获取SE_SHUTDOWN_NAME权限(普通进程默认没有该权限)。

完整代码示例

#include <Windows.h>
#include <stdio.h>

BOOL EnableShutdownPrivilege() {
    HANDLE hToken;
    TOKEN_PRIVILEGES tp;

    // 打开当前进程的访问令牌
    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
        printf("OpenProcessToken failed, error: %lu\n", GetLastError());
        return FALSE;
    }

    // 获取关机权限的LUID标识
    if (!LookupPrivilegeValueW(NULL, SE_SHUTDOWN_NAME, &tp.Privileges[0].Luid)) {
        printf("LookupPrivilegeValue failed, error: %lu\n", GetLastError());
        CloseHandle(hToken);
        return FALSE;
    }

    tp.PrivilegeCount = 1;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    // 启用关机权限
    if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) {
        printf("AdjustTokenPrivileges failed, error: %lu\n", GetLastError());
        CloseHandle(hToken);
        return FALSE;
    }

    CloseHandle(hToken);
    return TRUE;
}

int main() {
    // 先启用关机权限,没有权限会导致关机失败
    if (!EnableShutdownPrivilege()) {
        return 1;
    }

    // 调用API执行关机操作
    // 参数说明:
    // 1. NULL: 操作本地计算机
    // 2. NULL: 不向用户显示提示消息
    // 3. 1: 延迟1秒后关机
    // 4. TRUE: 强制关闭所有未保存数据的应用程序
    // 5. TRUE: 关机后切断电源
    // 6. 关机原因标记:这里设为计划内的系统操作原因
    if (!InitiateSystemShutdownExW(NULL, NULL, 1, TRUE, TRUE, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_MINOR_UPGRADE | SHTDN_REASON_FLAG_PLANNED)) {
        printf("InitiateSystemShutdownEx failed, error: %lu\n", GetLastError());
        return 1;
    }

    printf("Shutdown initiated successfully.\n");
    return 0;
}

代码说明

  • EnableShutdownPrivilege函数:负责获取并启用关机所需的系统权限,这是关机操作的必要前提,否则API调用会失败。
  • InitiateSystemShutdownExW:Windows官方提供的系统关机API,支持自定义延迟时间、是否强制关闭应用、关机后是否断电等参数,功能比system("shutdown -s -t1")更灵活可控。

内容的提问来源于stack exchange,提问作者Abdallah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:10:32