SWHelper希沃修改工具安装及简单使用教程

SWHelper 是一个针对希沃管家的增强辅助工具,它能够解锁部分系统限制、允许注入自定义 JavaScript 脚本(作为插件加载)以及自定义锁屏壁纸等

⚠️ 免责声明
本项目及教程仅供 非中国大陆地区及内部离线网络环境 研究学习使用。严禁在连接公共网络的设备上使用,严禁用于任何破坏计算机信息系统安全的行为。请严格遵守当地法律法规及DMCA,风险自负


📥 资源下载

对于大多数用户,无需手动编译,直接下载编译好的版本即可:下载exe 下载zip(推荐)

详细步骤:

  1. 在上面下载最新版本的 swhelper.zip(推荐)或者swhelper.exe
  2. 如果你下载的是exe,需要从这里下载各bat脚本以便后续操作

🛠️ 安装教程

视频教程:

1. 放置主程序

从上面下载 swhelper.zip解压出 swhelper.exe 并移动到任何你想放的位置 (路径不能有中文)

  • 示例目标路径: C:\Users\seewo (用户目录)

注意:注册SWHelper服务后请不要再移动该文件,否则请重新注册服务

2. 如果你的设备有冰点还原

  1. 直接打开0强解还原.bat
  2. 等待成功后重启设备再进行下一步

3. 配置SWHelper服务

  1. 将你下载的压缩包里的00注册服务.bat,00删除服务.bat00重新注册服务.bat放到swhelper.exe同文件夹下,本示例中是C:\Users\seewo
  2. 一般情况下直接打开相应操作的bat脚本即可,例如00注册服务.bat,bat脚本用完就可以删了,SWHelper运行只需要swhelper.exe即可
  3. 你也可以直接通过命令参数--AutoStart-reg--AutoStart-unreg注册/删除服务
  4. 一旦配置好服务,SWHelper将在启动后的约15s将自身注入到管家界面,不过仍有极小概率失败,此时可以重启一下

🤔 功能使用教程

SWHelper目前所有功能:

v1.1.0-beta3全部功能一览

  1. SWHelper主窗口,通过点击屏幕左上角,或者桌面管家窗口左上角的一个很不起眼的灰色点状半透明按钮,将打开此窗口
  2. 详细信息窗口,显示当前各组件版本
  3. 锁屏背景修改窗口,在输入框中使用输入目标图片地址(需为file://,http://https://协议),或手动在配置文件中设置
  4. 迷你JS调试控制台窗口,功能暂不完善,大部分代码仍然不可执行
  5. HTTP测试窗口,用于开发者调试,普通用户一般用不到(开发者也不怎么用
  6. 虚拟键盘,便于在锁屏上输入文本(默认键盘会被希沃拦截)
  7. 刷新页面功能,用于在该页面被改出问题后重置
  8. 解锁锁屏,也是该工具的核心功能,点击后即可解锁锁屏,后台将显示使用激活码解锁
  9. 隐藏信息,在希沃管家中隐藏设备 ID,但后端仍可见
  10. 10-13为各功能打开按钮,此处省略…

14. SWHelper版本信息,点击后将会打开"详细版本信息"窗口

⚙️ 个性化配置

首次成功运行后,SWHelper会在当前用户目录下生成配置文件

你可以通过修改该文件来更换壁纸或加载插件:

  • 配置文件路径: C:\Users\用户名\.swhelper.config

配置文件示例 (.swhelper.config):

1
2
3
4
5
6
7
8
9
10
11
{
"disableHelper": false,
"autoHideInfo": false,
"backgroundImage": "file:///C:/Users/Public/Pictures/my_wallpaper.jpg",
"plugins": [
{
"url": "file:///C:/Users/seewo/my_plugin.js",
"loadType": "loadOnce"
}
]
}
  • disableHelper: 禁用修改工具前端UI,背景替换和插件加载仍生效
  • autoHideInfo: 自动隐藏信息,通常仅在展示SWHelper功能使用,会影响设置的自定义背景,使其不生效
  • backgroundImage: 设置自定义锁屏背景,将在SWHelper运行时自动替换原有背景,支持本地路径 (file:///...) 或网络图片 (http://...)(不推荐使用网络图片)
  • plugins: 插件列表,可注入自定义 JS 代码以自定义功能,loadType等参数解释见下文

👨‍💻 高级:手动编译教程

如果你需要自行修改源码,可以参考下方的编译指南:

👉 点击展开:SWHelper 编译详细指南 (Win/Linux)

编译环境要求

无论在 Windows 还是 Linux 下编译,都需要安装以下基础工具:

  1. Node.js (v22.x) & npm
  2. Terser (npm install -g terser)
  3. Make
  4. GCC / MinGW-w64 (C 语言编译器)
  5. Windres (资源编译器)

方式一:Linux / WSL 环境编译 (推荐)

使用 Linux 进行交叉编译通常最为顺利

  1. 安装依赖 (Ubuntu/Debian):

    1
    2
    3
    4
    sudo apt update
    curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
    sudo apt install -y nodejs build-essential mingw-w64 make
    sudo npm install -g terser
  2. 克隆代码并编译:

    1
    2
    3
    4
    5
    git clone https://git.s3.fan/Steve3184/SWHelper.git
    cd SWHelper

    # 执行一键编译脚本
    bash ./build.sh

    编译成功后,当前目录下会生成 swhelper.exe

方式二:Windows 环境编译 (使用 MSYS2)

Windows 下建议使用 MSYS2 编译,同时还需要Nodejs v22+

  1. 下载并安装 MSYS2NodeJs

  2. 解压到一个工作目录(例如D:\workspace)后,将刚才下载的NodeJS解压到此处,重命名文件夹为node,并将下载的源码也解压到此处,重命名为swhelper

  3. 右键左下角Windows徽标,选择”PowerShell (管理员)”,并在打开的窗口输入下面的命令(记得替换D:/workspace为你在上一步创建的工作目录):

    1
    2
    3
    4
    powershell -ep bypass
    cd "D:/workspace/swhelper"
    ../node/npm i
    ../node/node build.js
  4. 打开开始菜单或者MSYS2安装目录,选择”MinGW”打开,执行下面的命令(记得替换/d/workspace为你在上一步创建的工作目录):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    pacman -S make mingw-w64-x86_64-gcc
    # 此处需要输入y并回车确认安装
    cd /d/workspace/swhelper
    make
    # 你可以通过设置FLAGS变量来选择可选功能
    # 例如:
    make clean_ctmp # 清理编译缓存
    make FLAGS="-DMUUID='\"在这里填写允许的MUUID\"'"
    # 注意: 目前想要查看muuid需要自行编译一个带muuid的版本,使用空muuid即可:
    make FLAGS="-DMUUID='\"\"'"
  5. 编译好了,你将在D:\workspace\swhelper找到生成的swhelper.exe


🧪 高级:插件编写指南

SWHelper 允许编写 JavaScript 插件并在渲染进程 (Render Thread) 中运行。通过 IPC 通信,插件还可以请求主进程执行更高权限的操作

1. 核心概念

  • 运行环境: 插件代码默认在目标软件的渲染进程中执行
  • 通信机制: 使用 ipcRenderer 与主进程通讯
  • 鉴权密钥: 必须使用固定的 apiKeychannel 才能通过主进程的校验

2. 插件开发模板

👉 点击展开:RenderThread插件示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// 引入依赖 (利用 remote 模块调用系统 API)
const fs = require('electron').remote.require('fs');
const path = require('electron').remote.require('path');
const os = require('electron').remote.require('os');
const { ipcRenderer } = require('electron');

// 必须保留的固定常量,用于通过主进程校验
const apiKey = '7c5a1bae0eae82d8246c6cb70be0beb5';
const channel = 'channel-0a4efbc3';

// === 配置文件路径 ===
const configFilePath = path.join(os.homedir(), '.swhelper.config');

// === 核心功能封装 ===

/**
* 请求主进程执行 JS 代码 (Action: exec)
* @param {string} script 要在主进程执行的 JS 代码字符串
*/
function doEval(script) {
ipcRenderer.send(channel, {
apiKey: apiKey,
action: 'exec',
data: script
});
}

/**
* 请求注入代码 - 仅一次 (Action: i)
* @param {string} script 要注入的代码
*/
function doInjectOnce(script) {
ipcRenderer.send(channel, {
apiKey: apiKey,
action: 'i',
data: script
});
}

/**
* 请求注入代码 - 循环注入 (Action: j)
* 适用于页面刷新后需要重新生效的场景
* @param {string} script 要注入的代码
*/
function doInjectLoop(script) {
ipcRenderer.send(channel, {
apiKey: apiKey,
action: 'j',
data: script
});
}

// === 接收主进程的反馈 ===
ipcRenderer.on(channel + '-reply', (event, data) => {
const { ok, act, err, ret } = data;
if (!ok) {
console.error(`[Plugin] Action ${act} failed:`, err);
} else {
console.log(`[Plugin] Action ${act} success. Return:`, ret);
}
});

// === 配置读写辅助函数 ===
function loadConfig() {
try {
return JSON.parse(fs.readFileSync(configFilePath, 'utf-8'));
} catch (e) {
return {}; // 读取失败返回空对象
}
}

function saveConfig(newConfig) {
fs.writeFileSync(configFilePath, JSON.stringify(newConfig));
}

// ============================================
// 🚀 在此处编写你的插件逻辑
// ============================================

// 示例 1: 简单的弹窗 (在渲染进程执行)
alert("插件加载成功!Hello from SWHelper Plugin");

// 示例 2: 读取当前配置并打印
let currentConfig = loadConfig();
console.log("当前配置:", currentConfig);

// 示例 3: 让主进程弹出一个消息框 (跨进程执行)
// doEval("const { dialog } = require('electron'); dialog.showMessageBox({ message: '这是来自主进程的消息' });");

3. API 详解

插件通过 ipcRenderer.send 发送指令对象,结构如下:

1
2
3
4
5
{
apiKey: '...', // 固定密钥
action: '...', // 指令动作
data: '...' // 具体的脚本内容
}
  • exec: 直接在主进程 (Main Process) 上下文中执行 data 中的 JS 代码,可调用大部分主进程 API (对于require等函数的获取见下文)
  • i: 将代码注入到所有窗口中执行一次,需插件自行判断是否为目标窗口
  • j: 将代码加入循环队列,定期注入,这对于需要对抗页面刷新或重置逻辑的功能非常有用

4. 如何安装插件

编写好 .js 文件后(例如 C:\Users\seewo\my-plugin.js),需要在配置文件的 plugins 字段中注册:

编辑配置文件: C:\Users\用户名\.swhelper.config

1
2
3
4
5
6
7
8
9
{
"disableHelper": false,
"plugins": [
{
"url": "file:///C:/Users/seewo/my-plugin.js",
"loadType": "loadOnce"
}
]
}

loadType 说明:

  • loadOnce: 插件代码只运行一次(适合初始化脚本)
  • loadLoop: 插件代码会被反复运行(慎用,适合需要持续检测状态的脚本),需插件自行编写是否重复注入检测,例如if(window.__self_)return;window.__self_=1;
  • mainThread: (特殊) 直接注入主进程,通常不需要在插件代码里再写 IPC 通信,直接写主进程逻辑即可

5. Main Thread 注入特别注意事项

当你在配置文件中将插件的 loadType 设置为 mainThread 时,代码将直接在SWHelper的主进程中运行

⚠️ 重要提示
在主进程注入的上下文中,默认无法直接使用 require 函数

你需要使用加载器特供的全局函数 global.___r_ 来加载模块,并使用特定的全局函数来向渲染进程注入代码

主进程专用 API 示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// === 获取模块 (替代 require) ===
// 在 mainThread 中必须这样引入模块
const electron = global.___r_('electron');
const fs = global.___r_('fs');
const path = global.___r_('path');

// === 向渲染进程注入代码 ===

// 1. 只注入一次 (相当于 Renderer 的 doInjectOnce)
// content: 要注入的 JS 字符串
global.___i_("console.log('Main process says hello once');");

// 2. 循环注入 (相当于 Renderer 的 doInjectLoop)
// content: 要注入的 JS 字符串 (每 5ms 尝试注入一次)
global.___j_("console.log('Main process is keeping this alive');");

总结:如果你编写的是 mainThread 插件,请务必把所有的 require('xx') 替换为 global.___r_('xx')


❓ 常见问题

Q: 重启后没有反应?
A: 请先检测是否解锁冰点还原,如果已经解锁,请检查任务管理器”服务”选项卡中是否有 SWHelperService 服务。如果存在该服务,尝试重新注册SWHelper服务,可能是由于swhelper.exe目录改变导致(确保路径没有中文)

Q: 手动打开某些bat脚本后闪退?
A: 有几个脚本确实运行完就没了,如果你认为确实有问题,请检查swhelper.log日志文件

Q: 背景图片不显示?
A: 请确保配置文件中的路径格式正确,本地文件需使用 file:/// 前缀,且路径中尽量不要包含中文


SWHelper希沃修改工具安装及简单使用教程
https://s3.fan/2025/11/25/SWHelper希沃修改工具安装及简单使用教程/
作者
Steve3184
发布于
2025年11月25日
许可协议