# 通过 NVIDIA 独显状态控制 Wallpaper Engine 开机启动


<!--post-->

## 背景

家里使用外接显卡（eGPU）连接大屏幕时，希望 Wallpaper Engine 自动启动显示动态壁纸。

但外出使用笔记本时，没有外接显卡，不希望壁纸程序开机启动，避免浪费资源。

因此通过 Windows 计划任务，在登录时检测 NVIDIA GPU 状态，只有 `nvidia-smi` 检测成功时才启动 Wallpaper Engine。

------

## 1. 关闭 Wallpaper Engine 自启动

先关闭 Wallpaper Engine 自带的开机启动：

```powershell
Wallpaper Engine
→ 设置
→ 常规
→ Windows 启动时运行
```

取消勾选。

避免它绕过检测直接启动。

------

## 2. 创建检测脚本

创建目录：

```powershell
mkdir C:\Scripts
```

创建：

```powershell
C:\Scripts\start-wallpaper.vbs
```

内容：

```powershell
Set WshShell = CreateObject("WScript.Shell")

ret = WshShell.Run("nvidia-smi", 0, True)

If ret = 0 Then

    WshShell.Run """C:\Program Files (x86)\Steam\steamapps\common\wallpaper_engine\wallpaper64.exe""", 0, False

End If
```

逻辑：

- `nvidia-smi` 返回码为 `0`
  - NVIDIA 显卡可用
  - 启动 Wallpaper Engine
- 返回非 `0`
  - 没有可用 NVIDIA GPU
  - 不启动

------

## 3. 测试脚本

手动运行：

```powershell
wscript "C:\Scripts\start-wallpaper.vbs"
```

- 连接 eGPU 时：应该启动 Wallpaper Engine。

- 未连接 eGPU 时：应该无任何动作。


------

## 4. 创建 Windows 计划任务

打开：

```
Win + R
taskschd.msc
```

选择「创建任务」

不要选择「创建基本任务」。

------

### 常规

名称：

```
Start Wallpaper When NVIDIA Available
```

勾选：

```
使用最高权限运行
```

因为 `nvidia-smi` 需要管理员权限。

------

### 触发器

新建：

```
登录时
```

高级设置

```
延迟任务：30 秒
```

------

### 操作

程序：

```powershell
wscript
```

参数：

```powershell
"C:\Scripts\start-wallpaper.vbs"
```

------

## 最终效果

### 家里

```
连接 eGPU
    ↓
Windows 登录
    ↓
计划任务等待 30 秒
    ↓
执行 nvidia-smi
    ↓
检测成功
    ↓
启动 Wallpaper Engine
```

### 外出

```
无 eGPU
    ↓
Windows 登录
    ↓
计划任务等待 30 秒
    ↓
执行 nvidia-smi
    ↓
检测失败
    ↓
不启动 Wallpaper Engine
```

这样可以让壁纸程序根据实际硬件环境自动启停。


---

> 作者: [fupcode](https://github.com/fupcode)  
> URL: https://fupcode.com/blog/posts/egpu/wallpaper-engine-smart-start/  

