# Jscm-Core-FrameWork
**Repository Path**: SnailcatMall/Jscm-Core-FrameWork
## Basic Information
- **Project Name**: Jscm-Core-FrameWork
- **Description**: Jscm-Core 是一个 Java Native Interface(JNI)封装框架,通过配套的 Jscm.dll 原生动态链接库,将 Windows 系统级 API、XCGUI 炫彩界面库、JadeView WebView2 引擎、锐浪报表 Grid++、Adobe Photoshop COM 自动化等底层能力,暴露为 Java 可直接调用的 native 静态方法集合。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://www.snailcatmall.com/
- **GVP Project**: No
## Statistics
- **Stars**: 19
- **Forks**: 5
- **Created**: 2026-02-21
- **Last Updated**: 2026-09-30
## Categories & Tags
**Categories**: utils
**Tags**: Jscm-Core框架, JNI开源框架
## README
# Jscm-Core — Java 系统级原生操作框架(JNI 封装库)
> **项目名称**:`Jscm-Core` 框架
> **GroupID**:`com.scm` · **ArtifactID**:`Jscm-Core` · **Version**:`1.0-SNAPSHOT`
> **JDK**:Java 8+ · **平台**:Windows 7+(x86 / x64) · **构建**:Maven
> **技术路线**:**JNI(Java Native Interface)**,**不是 JNA**
---
## ⚠️ 重要说明:本框架基于 JNI,非 JNA
Jscm-Core 使用 **Java Native Interface(JNI)** 技术,通过配套的原生动态链接库 `Jscm.dll`(C/C++ 编写)暴露底层能力,**不使用 JNA(Java Native Access)**。两者的关键区别如下,请勿混淆:
| 维度 | JNI(本项目) | JNA |
|:---|:---|:---|
| 调用方式 | `native` 方法声明 + `System.load("Jscm.dll")` | 运行时反射 + `Library` 接口映射 |
| 原生入口 | `ModuleOperationUtilsJNI` 集中声明全部 `native` 方法 | 通过 `Native.load()` 动态代理 |
| 性能 | 静态绑定、直接调用,开销更低 | 运行时动态映射,略有额外开销 |
| 结构体映射 | 手工维护 `Tag*` / `*_struct` Java 类,字段顺序与 C 结构体一一对应 | 依赖 `Structure` 运行时计算内存布局 |
| 回调 | 继承 `com.scm.all.pfunc.*` 空实现接口(虚方法回调) | `Callback` 动态代理 |
> 因此本项目所有 `pfunc` 回调类、`struct` 结构体、`ModuleOperationUtilsJNI` 方法均服务于 **JNI** 静态绑定,编写代码时请勿套用 JNA 的 `Structure`/`Native.load` 用法。
---
## 项目规模一览
| 指标 | 数值 |
|:---|:---|
| Java 源文件数 | **300+** |
| 总代码行数 | **~110,000+** |
| JNI `native` 方法数 | **4,963** |
| XCGUI 封装方法数 | **1,648**(29 个类) |
| JadeView 封装方法数 | **98+**(WebView2 引擎) |
| Report_Table 封装方法数 | **2,842**(26 个类) |
| Photoshop 自动化方法数 | **582** |
| UI 组件引擎(component) | **97 个 `XC*ComponentUI` 组件** |
| 回调接口(pfunc) | **47 个**(含 `Nonvirtual` 子包) |
| AI 集成 | Ollama / Coze / RunningHub / 云端 LLM 四大平台 |
| 现代 Web 服务 | Netty HTTP/WebSocket + RBAC 鉴权 + 阿里云 OSS |
---
## 目录
- [一、项目简介](#一项目简介)
- [二、GUI 界面预览](#二gui-界面预览)
- [三、功能特性与优势](#三功能特性与优势)
- [四、技术栈与依赖](#四技术栈与依赖)
- [五、系统架构](#五系统架构)
- [六、快速开始](#六快速开始)
- [七、模块详解](#七模块详解)
- [八、数据结构、枚举与回调体系](#八数据结构枚举与回调体系)
- [九、构建与部署](#九构建与部署)
- [十、技能库(Skills)使用与提问指南](#十技能库skills使用与提问指南)
- [十一、许可](#十一许可)
---
## 一、项目简介
Jscm-Core 是一个 **Java Native Interface(JNI)封装框架**,通过配套的 `Jscm.dll` 原生动态链接库,将 Windows 系统级 API、XCGUI 炫彩界面库、JadeView WebView2 引擎、锐浪报表 Grid++、Adobe Photoshop COM 自动化等底层能力,暴露为 Java 可直接调用的 `native` 静态方法集合。同时内置了纯 Java 实现的现代应用层能力:AI 大模型客户端、Netty 高性能 HTTP/WebSocket 服务、RBAC 鉴权、对象存储、邮件收发、拼多多云打印等,形成「底层原生 + 高层服务」的一体化开发框架。
### 核心能力一览
| 领域 | 技术底层 | 封装规模 |
|:---|:---|:---|
| Windows 系统 API | Win32 API(窗口/进程/线程/内存/注册表/句柄) | 400+ |
| XCGUI 炫彩界面库 | Direct2D 渲染引擎,29 个控件类 | 1,648 |
| Direct3D / DXGI 硬件渲染 | D3D11 设备 / 交换链 / 适配器枚举(`D3D11Interfaces` + `D3D11Chain`) | 2 类 |
| JadeView WebView2 | Microsoft Edge WebView2 引擎 | 98+ |
| 锐浪报表 Grid++ | COM 报表引擎,26 个功能类 | 2,842 |
| Adobe Photoshop | PowerShell COM → JavaScript 自动化 | 582 |
| AI 集成 | Ollama / Coze / RunningHub / 云端 LLM | 50+ |
| 现代 Web 服务 | Netty HTTP 静态服务器 + WebSocket + 分片传输 | 80+ |
| 安全鉴权 | Sa-Token + RBAC + BCrypt + Druid 连接池 | 20+ |
| 对象存储 | 阿里云 OSS(上传/下载/分片/进度) | 30+ |
| 邮件收发 | SMTP / IMAP / 群发 / 转发 / 重试 | 20+ |
| 拼多多云打印 | WebSocket 协议封装 | 15+ |
| 键鼠硬件驱动 | DD / Ghost / Md 三种驱动方案 | 100+ |
| 内存调试 | 内存读写 / 特征码搜索 / 硬件断点 / API Hook | 80+ |
| 32/64 位自适配层 | 注入 / 内存 / 注册表 / VEH / 调试断点 聚合工具类,按宿主 JVM 位宽自动切换 | 5 类 |
| 反汇编引擎 | CapStone 反汇编 | 10+ |
| UI 组件引擎 | 97 个链式组件(基础/表单/数据/反馈/导航/图表等) | 97 类 |
| 数据结构 & 枚举 | Tag 结构体 / 枚举常量 / 回调接口 | 150+ |
---
## 二、GUI 界面预览
以下截图展示了框架的实际界面效果,来源于项目内置示例程序 `ComponentShowcase`(JSCM 全组件展示,9 大分类)与 JadeView WebView2 桌面应用。
### 2.1 XCGUI 炫彩组件展示(ComponentShowcase)
`ComponentShowcase` 以顶部选项卡 + 分类面板的形式,集中展示了框架全部 97 个链式组件的真实渲染效果:
| 分类 | 说明 | 预览 |
|:---|:---|:---|
| 基础控件 | 按钮 / 单选 / 复选 / 开关 / 滑块 / 评分等 |  |
| 表单输入 | 输入框 / 数字输入 / 下拉 / 级联 / 日期选择 / 上传等 |  |
| 数据展示 | 表格 / 列表 / 树 / 卡片 / 描述列表 / 时间轴 / 日历 / 进度等 |  |
| 反馈交互 | 消息 / 通知 / 对话框 / 抽屉 / 加载 / 气泡 / 弹出确认等 |  |
| 导航 | 页签 / 菜单 / 面包屑 / 侧边菜单 / 锚点 / 步骤条等 |  |
| 数据容器 | 表格 / 列表 / 树 / 穿梭框 / 无限滚动等 |  |
| 图表 | 折线 / 柱状 / 饼图 / 漏斗 / 仪表盘 / 热力图 / K线 / 散点 / 金融图 |  |
| 图标库 | 内置 200+ SVG 图标 |  |
| 头部菜单 | 头部导航 / 下拉菜单 / 菜单栏 |  |
### 2.2 JadeView WebView2 桌面应用
基于 Chromium 内核的 HTML/CSS/JS 桌面应用,支持无边框、透明、圆角等现代 UI 能力:
| 场景 | 预览 |
|:---|:---|
| JadeView 桌面应用窗口 |  |
| JadeView 交互效果 |  |
---
## 三、功能特性与优势
### 3.1 底层原生能力(JNI)
- **全量 Win32 API 封装**:窗口、进程、线程、内存、注册表、句柄、模块枚举等系统级操作均可直接以 `native` 静态方法调用。
- **双架构自适应**:通过 `sun.arch.data.model` 自动检测 32/64 位,自动加载对应的 `Jscm.dll`,API 签名按 `long`/`int` 地址宽度对称设计。
- **32/64 位自适配聚合层**:`com.scm.all.export` 下的 `InjectUtils` / `MemoryUtils` / `RegistryUtils` / `VehUtils` / `DebugBreakPointUtils` 把 x86/x64 孪生类合并为单一入口,调用方无需写 `if (is32)`,统一口径为「句柄用 `int`、地址与返回值用 `long`」(详见 [7.15](#715-x64x86--平台专用模块-与-3264-位自适配聚合层))。
- **硬件级键鼠模拟**:DD / Ghost / Md 三种驱动方案,支持绝对/相对移动、按键、滚轮、文本输入,可绕过应用层检测。
- **内存调试三件套**:跨进程内存读写 + 特征码搜索、硬件断点(DR0-DR3)、API Hook,覆盖逆向与自动化场景。
- **CapStone 反汇编**:内嵌反汇编引擎,支持 x86/x64 指令流解析。
### 3.2 界面与报表
- **XCGUI 炫彩界面库**:基于 Direct2D 硬件加速,29 个控件类、1,648 个方法,提供现代扁平化 / 圆角 / 透明窗口等 UI 能力。
- **JadeView WebView2**:基于 Chromium 内核,支持透明窗口、无边框、自定义 UA、预加载 JS、CORS 白名单、IPC 跨进程通信,可用 HTML/CSS/JS 构建桌面应用界面。
- **锐浪报表 Grid++**:COM 报表引擎完整封装,支持设计器、打印预览、PDF/Excel/Word/HTML 导出、图表、条形码、交叉表等企业级报表能力。
### 3.3 现代应用服务层(纯 Java)
- **Netty 高性能服务**:内置静态文件 HTTP 服务器、WebSocket 服务器(文本/二进制/文件分片)、断点续传、分片传输协议(`ChunkedTransfer`)、代理路由、压测工具(`PressureTest`)。
- **RBAC 安全鉴权**:基于 Sa-Token,内置登录限流防暴力破解、BCrypt 密码散列、MySQL 用户数据源(Druid 连接池)、角色权限接口抽象、验证码。
- **对象存储**:阿里云 OSS 客户端单例封装,支持上传/下载、分片、进度回调、预签名 URL、缩略图,配置写入统一配置中心。
- **邮件收发**:SMTP 发信(含反垃圾邮件头、群发连接复用、失败追踪、SMTP 返回码智能重试)、IMAP 收信(递归 MIME 解析、心跳保活、自动重连)、转发功能。
- **拼多多云打印**:完整封装拼多多打印组件 WebSocket 协议(打印机管理 / 打印任务 / 任务状态查询 / 结果通知),提供链式 Builder 数据模型。
- **AI 大模型集成**:本地 Ollama、云端 LLM、Coze 工作流、RunningHub 平台四大 AI 能力,支持流式输出、多模态(图片)、技能系统。
### 3.4 UI 组件引擎(纯 Java · 无 Swing 依赖)
- 97 个 `XC*ComponentUI` 链式组件,覆盖基础控件、表单输入、数据展示、反馈交互、导航、数据容器、图表、图标库等完整分类。
- 内置全局事件分发器(`XCUIEventDispatcher`)、全局资源回收系统(`XCUIResourceManager`,类似 Java GC)、主题令牌(`ElementTheme`)、动画引擎(`AnimationEngine`/`Easing`)。
- 流光边框动画引擎、图像编辑工具(贴纸/透视变换)等高级工具。
### 3.5 架构优势
- **统一日志**:全项目基于 slf4j + logback,统一日志规范。
- **链式 / Fluent API**:AI 工具包、JadeViewApp、打印数据模型、组件 Builder 等均采用 Builder + 链式调用,代码简洁易读。
- **线程安全**:并发控制使用 `CopyOnWriteArrayList`、`ConcurrentHashMap`、`AtomicLong` 等,避免竞态。
- **资源自动管理**:ShutdownHook 自动清理、`AutoCloseable` 释放连接池、`XCUIResourceManager` 自动回收句柄,避免资源泄漏。
- **泛型化与类型安全**:消除 raw type 与 unchecked cast,编译期类型检查更严格。
---
## 四、技术栈与依赖
| 依赖 | 版本 | 用途 |
|:---|:---|:---|
| `commons-lang3` | 3.12.0 | 字符串/对象通用工具 |
| `javax.mail` | 1.6.2 | SMTP/IMAP 邮件收发 |
| `junit` | 4.13.2 | 单元测试 |
| `slf4j` + `logback` | 内置 | 统一日志 |
| `fastjson2` | 内置 | JSON 序列化(snake_case 映射) |
| `OkHttp` | 内置 | HTTP/WebSocket 客户端(拼多多打印) |
| `Netty` | 内置 | HTTP/WebSocket 服务器与客户端 |
| `Sa-Token` | 内置 | RBAC 鉴权 |
| `Druid` | 内置 | MySQL 连接池 |
| `aliyun-sdk-oss` | 内置 | 阿里云对象存储 |
| `lucene-core` 等 | 8.11.4 | 全文检索(Java 8 最后兼容版) |
> 原生依赖(JNI 动态库):`Jscm.dll` / `grdes6x64.dll` / `ghost_x64.dll` / `md_x64.dll` / `jawt.dll` 等,位于 `src/main/resources/init_/x64` 与 `x86`。
---
## 五、系统架构
```
┌─────────────────────────┐
│ App.java (入口层) │
└────────────┬────────────┘
│ 调用
┌──────────────────────────┼──────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌───────────────────┐ ┌──────────────────┐
│ AI 集成层 │ │ 业务组件层 │ │ 高级工具层 │
│ ClaudeCode │ │ 97 个 XC*组件 │ │ PhotoshopTool │
│ CozeAI │ │ XCChainedUI │ │ PowerShell │
│ RunNingHubAI │ │ AnimationEngine │ │ EMailUtils │
│ CloudLLM │ │ XCUIResourceMgr │ │ PddPrintUtils │
└────────┬────────┘ │ XCUIEventDispatch│ │ CaptchaGenerator│
│ └────────┬──────────┘ │ CapStone │
▼ ▼ └────────┬─────────┘
┌──────────────────────────────────────────────────────────────────────┐
│ 服务层 (Netty / 鉴权 / 存储) │
│ NettyDirectoryServer NettyHttpClient SaTokenUtil(RBAC) │
│ JadeViewApp(门面) JadeViewOss ChunkedTransfer(分片) │
└─────────────────────────────────┬────────────────────────────────────┘
│ 调用
▼
┌──────────────────────────────────────────────────────────────────────┐
│ 高级封装层 (High-Level Wrappers) │
│ XC_GUI (29类) JadeViewGUI (WebView2) Report_Table (26类) │
│ WindowOperationUtils ProcessAndThreadUtils SystemUtils │
└─────────────────────────────────┬────────────────────────────────────┘
│ 调用
▼
┌──────────────────────────────────────────────────────────────────────┐
│ 基础设施层 (Infrastructure) │
│ ModuleOperationUtilsJNI (4,963 native) pfunc(47接口) struct(枚举) │
└─────────────────────────────────┬────────────────────────────────────┘
│ System.load("Jscm.dll")
▼
┌──────────────────────────────────────────────────────────────────────┐
│ Jscm.dll (原生 C/C++ 动态链接库) │
│ XCGUI 引擎 · JadeView · Grid++ · Win32 API · CapStone · 键鼠驱动 │
└──────────────────────────────────────────────────────────────────────┘
```
### 完整目录结构
```
src/main/java/
│
├── App.java # 应用入口 & 使用示例
├── ComponentShowcase.java # JSCM 全组件展示(97 组件,9 大分类)
├── META-INF/MANIFEST.MF
│
└── com/scm/
├── all/ # ════════ 平台无关模块 ════════
│ │
│ ├── AI/ # AI 集成模块
│ │ ├── ClaudeCode/ # 本地 Ollama 大模型工具包
│ │ │ ├── ClaudeCodeToolkit.java # 主工具入口(链式 API)
│ │ │ ├── client/OllamaClient.java # Ollama HTTP 客户端
│ │ │ ├── cloud/CloudLLMClient.java # 云端 LLM 客户端
│ │ │ ├── cloud/CloudLLMConfig.java # 云端配置(Provider/Presets)
│ │ │ ├── config/ConfigManager.java # 配置管理器(.env)
│ │ │ ├── config/OllamaConfig.java # Ollama 配置(Builder)
│ │ │ ├── model/ # ChatRequest/ChatResponse/Message
│ │ │ ├── skills/ # Skill/SkillManager/CloudReviewSkill
│ │ │ ├── agent/ # AgentLoop(ReAct 工具调用)
│ │ │ ├── tool/ # 内置工具(fs/shell/web/todo)
│ │ │ └── utils/ # ImageProcessor/UrlHandler
│ │ ├── CozeAI/ # Coze 工作流平台
│ │ └── RunNingHubAI/ # RunningHub AI 平台
│ │
│ ├── component/ # UI 组件引擎(纯 Java,97 个组件)
│ │ ├── XCChainedUI.java # ★ 链式 API 唯一入口
│ │ ├── XCUIEventDispatcher.java # 全局元素事件分发器
│ │ ├── XCUIResourceManager.java # 全局资源回收系统(GC)
│ │ ├── XC*ComponentUI.java # 97 个组件实现
│ │ ├── AnimationEngine.java # 通用动画引擎
│ │ ├── anim/ # Anim/AnimateCSS/CubicBezier/Easing/Keyframes
│ │ ├── chart/ # ChartTooltip/ChartUtil
│ │ ├── layout/ # Responsive/ResponsiveGrid
│ │ ├── paint/ # Graphics2DBridge/PaintCallback
│ │ ├── theme/ElementTheme.java # 主题设计令牌 + 明暗监听
│ │ ├── pfunc/BannerCallBack.java
│ │ └── Utils/ # AnimatedBorderEngine/ImageEditorTool
│ │
│ ├── export/ # 核心导出模块
│ │ ├── ModuleOperationUtilsJNI.java # ★ JNI 总入口(~4,963 native)
│ │ ├── WindowOperationUtils.java # 窗口操作封装
│ │ ├── ProcessAndThreadUtils.java # 进程线程操作
│ │ ├── SystemUtils.java # 系统工具集
│ │ ├── ByteUtils.java # 字节编码转换
│ │ ├── ColorUtils.java # 颜色处理
│ │ ├── PathFileJSCM.java # DLL 路径管理(强制初始化)
│ │ ├── SearchLucene.java # Lucene 全文检索
│ │ │
│ │ ├── JscmNativeLibrary.java # ★ 位宽判定 + Jscm.dll 路径解析底座(包级私有)
│ │ ├── InjectUtils.java # 聚合:DLL/Shellcode 注入 · 远程调用 · 远程 JVM
│ │ ├── MemoryUtils.java # 聚合:内存读写 · 多级指针 · 内存搜索 · 页保护
│ │ ├── RegistryUtils.java # 聚合:注册表增删改查 · 枚举 · 类型转换
│ │ ├── VehUtils.java # 聚合:注入 DLL + 目标进程内 VEH 硬件断点
│ │ ├── DebugBreakPointUtils.java # 聚合:DebugActiveProcess 调试器断点 + 统一回调
│ │ │
│ │ ├── XC_GUI/ # XCGUI 炫彩界面(29 类)
│ │ │ ├── D2D/ # Direct2D 直绘门面(D2DInterfaces)
│ │ │ ├── GDI2/ # GDI / GDI+ 绘图门面(GDIUtils)
│ │ │ ├── D3D/ # Direct3D 11 / DXGI(D3D11Interfaces + D3D11Chain)
│ │ │ └── report/ # 锐浪报表原生 COM 封装(29 类)
│ │ ├── JadeViewGUI/ # JadeView WebView2 + 服务层
│ │ │ ├── JadeViewApp.java # ★ 应用门面(Builder 启动)
│ │ │ ├── JadeViewConfig.java # 统一配置中心
│ │ │ ├── JadeViewOss.java # 阿里云 OSS 客户端
│ │ │ ├── NettyDirectoryServer.java # HTTP 静态服务器 + WebSocket
│ │ │ ├── NettyHttpClient.java # HTTP 客户端 + 分片 + WebSocket
│ │ │ ├── PressureTest.java # 压测工具
│ │ │ ├── auth/ # RBAC 鉴权(Sa-Token)
│ │ │ └── core/ # WebView2 核心封装(8 类)
│ │ │
│ │ ├── Report_Table/ # 锐浪报表 Grid++(26 类)
│ │ ├── EmailUtils/ # 邮件收发(EMailUtils/CallBack)
│ │ ├── Print/ # 拼多多云打印(PddPrintUtils)
│ │ ├── VerificationCodeUtils/ # 验证码(CaptchaGenerator)
│ │ ├── capstone/ # 反汇编引擎(CapStone)
│ │ ├── hotkey/ # 键鼠驱动(DD/Ghost/Md)
│ │ └── powerUtils/ # PowerShell/CMD/Photoshop
│ │
│ ├── pfunc/ # 回调函数接口(47 个)
│ │ └── Nonvirtual/ # 非虚回调变体(10 个)
│ │
│ └── struct/ # 数据结构
│ ├── Enum/ # 枚举常量
│ │ ├── JadeView_Enum/ ReportGrid_Enum/ XC_Enum/
│ ├── JadeView_struct/ # JadeView 结构体(6 个)
│ └── Tag*.java # 基础数据结构(38 个)
│
├── x64/export/ # 64 位专用模块(4 个,多数已由 all/export 聚合类覆盖)
└── x86/export/ # 32 位专用模块(4 个,多数已由 all/export 聚合类覆盖)
```
---
## 六、快速开始
### 6.1 Maven 依赖
```xml
com.scm
Jscm-Core
1.0-SNAPSHOT
```
### 6.2 JNI 初始化(强制起始头)
> **硬性要求**:任何 JNI 调用之前,必须先执行 `PathFileJSCM` 三连初始化,否则 `Jscm.dll` 无法加载。
```java
import com.scm.all.export.PathFileJSCM;
import com.scm.all.export.PathFileJSCM1;
public class App {
public static void main(String[] args) {
// ===== JSCM 框架初始化(强制,必须放最前面)=====
PathFileJSCM.setDebugFile32(PathFileJSCM.getJarPath() + "sdk\\x86\\");
PathFileJSCM.setDebugFile64(PathFileJSCM.getJarPath() + "sdk\\x64\\");
PathFileJSCM.setIsDebug(false); // 生产 false / 开发 true
}
}
```
### 6.3 最小示例(XCGUI 窗口)
```java
// 起始头三连(见 6.2)
XCGUI_Core.XInitXCGUI(true); // true=D2D,false=GDI
int hWindow=XCGUI_Window.XWnd_Create(0,0,600,400,"我的窗口",0,
WindowStyle.window_style_default.getValue());
int hButton=XCGUI_Button.XBtn_Create(10,10,100,30,"按钮",hWindow);
XCGUI_Window.XWnd_Show(hWindow,true);
XCGUI_Core.XRunXCGUI(); // 消息循环(阻塞)
XCGUI_Core.XExitXCGUI(); // 退出
```
### 6.4 现代 Web 应用(JadeViewApp 门面)
```java
import com.scm.all.export.JadeViewGUI.JadeViewApp;
JadeViewApp app = JadeViewApp.builder("我的应用", "myapp123") // appSignature ≥ 6 字符
.rootPath(JadeViewApp.getJarDirectory())
.htmlEntry("index.html")
.devMode(true)
.httpPort(0) // 自动分配端口
.subscribe(-1, "app-ready", (wid, data) -> {
app.windowBuilder("主窗口", 1200, 800).build();
return 0;
})
.launch();
app.runMessageLoop(); // 阻塞;退出时自动清理
```
### 6.5 链式组件(XCChainedUI)
```java
import com.scm.all.component.XCChainedUI;
XCChainedUI.app()
.window("链式组件示例", 800, 600)
.button(20, 20, 120, 40, "点击我")
.onClick(id -> System.out.println("按钮被点击"))
.end()
.show()
.run();
```
### 6.6 32/64 位自适配(聚合工具类)
`com.scm.all.export` 下的聚合工具类会按宿主 JVM 位宽自动选择 x86/x64 实现,**同一份代码两种 JVM 都能跑**:
```java
import com.scm.all.export.VehUtils;
import com.scm.all.export.MemoryUtils;
// 1) 任何 native 调用之前先 boot()(配置 Jscm.dll 目录 + 提权,幂等)
VehUtils.boot();
// 2) 下硬件断点:地址支持 "模块名!偏移" / "!偏移" / 绝对地址,类型与长度自动推导
// 超时省略时用默认值(VehUtils.DEFAULT_TIMEOUT_MS = 10000)
VehUtils.VehHit hit = VehUtils.breakPoint(targetPid, "user32!GetMessageW");
System.out.println(hit == null ? "未命中 / 超时" : "断点命中:" + hit);
// 3) 跨进程内存读写:进程句柄是 int,地址是 long
int hProcess = MemoryUtils.openProcess(targetPid);
int value = MemoryUtils.readInt(hProcess, 0x401000L);
MemoryUtils.writeInt(hProcess, 0x401000L, 0x1234);
MemoryUtils.closeProcess(hProcess);
```
> 32 位目标进程必须用 32 位 JVM 调用,64 位目标必须用 64 位 JVM;32 位目标地址越界会抛 `IllegalArgumentException`。
---
## 七、模块详解
### 7.1 ModuleOperationUtilsJNI — JNI 总入口
> **文件**:`com/scm/all/export/ModuleOperationUtilsJNI.java`
> **规模**:约 4,963 个 `native` 方法声明
> **职责**:DLL 加载、系统架构检测、所有原生 API 的 Java 侧入口
```java
static {
if (systemIs32()) { System.load(tileDir() + "Jscm.dll"); }
if (systemIs64()) { System.load(tileDir() + "Jscm.dll"); }
}
```
| 分类 | 代表方法 | 说明 |
|:---|:---|:---|
| 窗口操作 | `FindWindowW`, `ShowWindow`, `SetWindowPos`, `SendMessageW` | Win32 窗口 API |
| 进程线程 | `CreateToolhelp32Snapshot`, `OpenProcess`, `CreateRemoteThread` | 进程/线程管理 |
| 内存操作 | `ReadProcessMemory`, `WriteProcessMemory`, `VirtualQueryEx` | 跨进程内存读写 |
| XCGUI | `XInitXCGUI`, `XWnd_Create`, `XBtn_Create`, `XRunXCGUI` | 炫彩 UI 全量封装 |
| JadeView | `JadeView_Init`, `JadeView_Create_Webview_Window_` | WebView2 引擎 |
| Report_Table | `report_Table_SetComPointer`, `report_Chart_SetChart3D` | 锐浪报表 COM |
| 键鼠驱动 | `DDBtn`, `DDMov`, `M_Delay` | DD/Ghost/Md 驱动 |
| 反汇编 | `CapStone_cs_open`, `CapStone_cs_disasm` | CapStone 引擎 |
| 硬件断点 | `RunHardwareBreakpointX86/X64` | 硬件调试断点 |
| 注册表 | `RegOpenKeyExW`, `RegSetValueExW`, `RegDeleteKeyW` | 注册表 CRUD |
### 7.2 核心工具类
#### ByteUtils — 字节 / 编码 / 进制 / 算法
```java
import com.scm.all.export.ByteUtils;
// 基础类型 ↔ 字节数组
byte[] b = ByteUtils.intToBytesArray(12345);
int i = ByteUtils.bytesArrayToInt(b);
// 字符串编码(与 Windows API 交互务必使用,避免乱码)
byte[] utf8 = ByteUtils.utf8ToBytesArray("中文");
String text = ByteUtils.bytesArrayToUtf8WideString(utf8);
// 进制转换
String hex = ByteUtils.bytesToHexString(b);
byte[] back = ByteUtils.hexStrToBytes(hex);
// 特征码搜索(?? 通配)
ByteUtils.hexToMd5BytesMatches("48 8B ?? ??", data);
```
#### ColorUtils — 颜色转换
```java
import com.scm.all.export.ColorUtils;
// RGBA 格式:(alpha<<24)|(b<<16)|(g<<8)|r
long red = ColorUtils.RGBA(255, 0, 0, 255);
long blue = ColorUtils.RGBA("#0088FF", 255); // 必须带 # 前缀
int[] hsv = ColorUtils.rgbToHsv(255, 0, 0);
```
### 7.3 XC_GUI — XCGUI 炫彩界面库封装
> **包**:`com.scm.all.export.XC_GUI` · **规模**:29 类 · 1,648 方法 · **引擎**:Direct2D
| 类名 | 方法数 | 功能 |
|:---|:---|:---|
| `XCGUI_Window` | 149 | 窗口创建/显示/调整/消息循环 |
| `XCGUI_Core` | 120 | 初始化/退出/布局加载/全局设置 |
| `XCGUI_Edit` | 119 | 编辑框/富文本编辑器 |
| `XCGUI_Element` | 116 | 通用元素操作 |
| `XCGUI_Draw` | 114 | 绘图引擎 |
| `XCGUI_List` | 111 | 列表控件 |
| `XCGUI_Adapter` | 107 | 数据适配器 |
| `XCGUI_Image` | 107 | 图像对象操作 |
| `XCGUI_ListView` | 82 | 列表视图 |
| `XCGUI_ListBox` | 78 | 列表框 |
| `XCGUI_Tree` | 69 | 树形控件 |
| `XCGUI_Shape` | 63 | 形状控件 |
| `XCGUI_ComboBox` | 52 | 组合框 |
| `XCGUI_Menu` | 46 | 菜单 |
| `XCGUI_Animation` | 45 | 动画引擎 |
| `XCGUI_Background` | 44 | 背景对象 |
| `XCGUI_ScrollView` | 28 | 滚动视图 |
| `XCGUI_TabBar` | 26 | 标签栏 |
| `XCGUI_Button` | 26 | 按钮 |
| `XCGUI_Layout` | 22 | 布局管理器 |
| `XCGUI_Pane` | 22 | 面板/分组框 |
| `XCGUI_Table` | 21 | 表格 |
| `XCGUI_Font` | 20 | 字体管理 |
| `XCGUI_ScrollBar` | 18 | 滚动条 |
| `XCGUI_DateTime` | 18 | 日期时间选择器 |
| `XCGUI_ToolBar` | 11 | 工具栏 |
| `XCGUI_ProgressBar` | 10 | 进度条 |
| `XCGUI_PropertyGrid` | 4 | 属性网格 |
> **句柄类型铁律**:`XWnd_*` 只接受**窗口句柄**;`XEle_*`/`XLayout_*`/`XDraw_*` 接受**元素/布局句柄**。混用会触发 `Jscm.dll` 空指针崩溃。
#### RenderConfig — 渲染管线运行时配置(`com.scm.all.export.XC_GUI.RenderConfig`)
按宿主 JVM 版本自动设置 `sun.java2d.*` 渲染管线属性,免去手动在 IDE 里配 VM 参数。**必须在任何 AWT / XCGUI / D2D / GDI 初始化之前调用**(`main` 最开头或 `static` 块内)。
| 模式常量 | 方法 | 渲染管线 | 适用场景 |
|:---|:---|:---|:---|
| `MODE_D2D` | `applyD2D()` | Direct2D(Java 9~11;其余回退 D3D) | `onD2D`(D2DInterfaces) |
| `MODE_D3D` | `applyD3D()` | Direct3D | Java 8 / 12+ |
| `MODE_OPENGL` | `apply("opengl")` | OpenGL | 跨平台 |
| `MODE_GDIPLUS` | `applyGdiPlus()` | native gdiplus.dll,保持硬件加速 | `onGDI`(GDIUtils / GDI+) |
| `MODE_GDI` | `applyGDI()` | Java2D 软件渲染 | 强制软件渲染 |
| `MODE_AUTO` | `applyAuto()` | 按 JVM 版本自动 | 默认 |
```java
import com.scm.all.export.XC_GUI.RenderConfig;
public static void main(String[] args) {
RenderConfig.applyD2D(); // D2D 场景(onD2D)
// RenderConfig.applyGdiPlus(); // GDI+ 场景(onGDI)
// RenderConfig.applyGDI(); // 强制软件渲染
// ...
}
```
辅助方法:`javaFeature()` 返回 JVM feature 版本(8/9/11/17...)、`isX86()` 判断 32 位、`printAddOpensHint()` 打印 Java 9+ 必须手动加的 `--add-opens` 清单。
> **两条注意**:
> 1. `sun.java2d.*` 能运行时用 `System.setProperty` 覆盖,但必须赶在 AWT/XCGUI 首次初始化前;`--add-opens` / `--enable-native-access` 是 JVM 启动参数,**无法**运行时设置,Java 9+ 仍需在 IDE VM options 或命令行手动传入(打包成 EXE 时由 `JarPackService` 的 Launcher 自动注入)。
> 2. **不要**用 `-Djava.library.path` 注入 DLL 路径,会导致 SDK 内 `jawt.dll` 与内嵌 JRE 冲突、D2D 失效。
#### D3D — Direct3D 11 / DXGI 硬件渲染(`com.scm.all.export.XC_GUI.D3D`)
> **包**:`com.scm.all.export.XC_GUI.D3D` · **规模**:2 类(`D3D11Interfaces` 门面 + `D3D11Chain` 链式)
> · **底层**:Jscm.dll 的 705 个 `X3D_*` 原生导出(`cx/Direct3D.wsv` 生成)
与 §7.3 的 D2D 直绘(`hDraw` 自绘、渲染目标由 XCGUI 管)不同,这里是 **DXGI + D3D11 基础设施**:
自己持有窗口 HWND、自己创建交换链、自己 `Present`,不经过 XCGUI 绘制回调。
| 类 | 形态 | 提供能力 |
|:---|:---|:---|
| `D3D11Interfaces` | 全静态门面 + 8 个句柄对象 | HRESULT/DXGI/D3D11 常量族、21 个接口 IID、GUID 与指针/缓冲区工具、`CreateDXGIFactory1/2`、适配器枚举(`AdapterDesc`)、交换链、D3D11 设备与立即上下文、渲染目标视图 |
| `D3D11Chain` | Fluent Builder(`AutoCloseable`) | `factory() → autoAdapter() → device() → swapChain(hwnd,w,h) → renderTarget() → viewport() → clear()/present()`;内置 11.1→11.0 降级、翻转模型→经典模型回退、`close()` 逆序幂等释放 |
```java
// 前置:PathFileJSCM.setDebugFile32/64 + setIsDebug(Jscm.dll 必须先可加载)
try (D3D11Chain chain = D3D11Chain.create()
.factory() // CreateDXGIFactory1
.autoAdapter() // 自动挑独显(跳过 WARP 软件适配器)
.device() // D3D11CreateDevice(含 11.1 → 11.0 自动降级)
.swapChain(hwnd, 1280, 720) // 优先翻转模型,失败自动回退经典模型
.renderTarget() // GetBuffer + CreateRenderTargetView + OMSetRenderTargets
.viewport()) {
chain.clear(0.10f, 0.18f, 0.24f, 1.0f).present();
}
```
**关键约定**:COM 接口指针恒用 `long`;出参 `byte[]` 长度必须与底层写入字节数一致
(`HRESULT`/`int`/`float`=4、指针=`pointerSize()`、GUID=16);已显式传适配器时
`DriverType` 必须是 `D3D_DRIVER_TYPE_UNKNOWN`;`D3D11Chain` 非线程安全。
**绘制管线**:门面只包到设备 / 交换链 / 渲染目标,`D3DCompile`、着色器创建与 `Draw` 等
由 `ModuleOperationUtilsJNI` 的 705 个 `X3D_*` 裸导出提供(`D3D_SKILL.md` §8.5)。
可运行示例(`demo/test/`,共用 `D3DDemoSupport.java`):
| 示例 | 说明 |
|:---|:---|
| `D3D11InterfacesExample` | 门面自检:`offscreen` / `window` 两模式,带断言 |
| `D3DTriangleGame` | 3D 彩色三角形:`D3DCompile` → 着色器 → `Draw` 全链路 |
| `D3DPongGame` | 双人对战 Pong:用视口摆放图元画出球 / 挡板 / 计分条 |
| `D3DTetrisGame` | 俄罗斯方块:重力 / 旋转踢墙 / 消行 / 计分 / 关卡,内置 3x5 点阵字库画文字 |
| `D3DReflexGame` | 反应速度小游戏:状态机 + 圆环 + 成绩柱状图 |
| `D3DShapeGallery` | 几何画廊:四套顶点着色器 + 着色器热切换 + 自动轮播 |
| `D3DBenchmark` | 帧时间基准:分位数统计 + 四档分辨率对比 + ASCII 直方图 |
| `D3DProbe` | `QueryInterface` / 出参写回探针 |
完整 API 与踩坑清单见技能文档 **`skills/D3D_SKILL.md`**。
### 7.4 component — UI 组件引擎(纯 Java)
> **包**:`com.scm.all.component` · **规模**:97 个 `XC*ComponentUI` · **无 Swing 依赖**
核心四件套:
| 文件 | 职责 |
|:---|:---|
| `XCChainedUI.java` | 链式 API 唯一入口(App/Window/Element/各组件 Builder) |
| `XCUIEventDispatcher.java` | 全局唯一元素事件分发器 |
| `XCUIResourceManager.java` | 全局资源回收系统(类似 Java GC) |
| `XC*ComponentUI.java` | 单个组件真正实现(97 个) |
#### 97 个组件清单
- **基础控件**:`XCButtonComponentUI`、`XCInputComponentUI`、`XCInputNumberComponentUI`、`XCRadioComponentUI`、`XCCheckboxComponentUI`、`XCSwitchComponentUI`、`XCSelectComponentUI`、`XCMultiSelectComponentUI`、`XCAutocompleteComponentUI`、`XCSearchComponentUI`、`XCSliderComponentUI`、`XCRateComponentUI`、`XCUploadComponentUI`、`XCTagComponentUI`、`XCDatePickerComponentUI`、`XCTimePickerComponentUI`、`XCDateRangePickerComponentUI`、`XCDateTimePickerComponentUI`、`XCCascaderComponentUI`、`XCTransferComponentUI`、`XCInputOtpComponentUI`、`XCInputTagComponentUI`、`XCColorPickerComponentUI`、`XCSegmentedComponentUI`、`XCTreeSelectComponentUI`。
- **数据展示**:`XCTableComponentUI`、`XCListBoxComponentUI`、`XCListViewComponentUI`、`XCTreeComponentUI`、`XCCardPanelComponentUI`、`XCCardTabsComponentUI`、`XCDescriptionsComponentUI`、`XCEmptyComponentUI`、`XCAvatarComponentUI`、`XCBadgeComponentUI`、`XCStatisticComponentUI`、`XCTimelineComponentUI`、`XCCalendarComponentUI`、`XCProgressComponentUI`、`XCProgressGaugeComponentUI`、`XCAnimatedNumberBoxUI`、`XCDynamicNumberComponentUI`、`XCCountdownComponentUI`、`XCSkeletonComponentUI`、`XCResultComponentUI`、`XCWatermarkComponentUI`、`XCDividerComponentUI`、`XCSpaceComponentUI`、`XCRowColComponentUI`。
- **反馈**:`XCMessageComponentUI`、`XCMessageBoxComponentUI`、`XCNotificationComponentUI`、`XCAlertComponentUI`、`XCDialogComponentUI`、`XCDrawerComponentUI`、`XCLoadingComponentUI`、`XCTooltipComponentUI`、`XCPopoverComponentUI`、`XCPopconfirmComponentUI`、`XCTourComponentUI`。
- **导航/容器**:`XCMenuComponentUI`、`XCMenuBarComponentUI`、`XCContextMenuComponentUI`、`XCBreadcrumbComponentUI`、`XCPaginationComponentUI`、`XCStepBarComponentUI`、`XCTabsComponentUI`、`XCToolBarComponentUI`、`XCHeaderComponentUI`、`XCPageHeaderComponentUI`、`XCAffixComponentUI`、`XCAnchorComponentUI`、`XCBacktopComponentUI`、`XCInfiniteScrollComponentUI`、`XCCarouselComponentUI`、`XCBannerCarouselComponentUI`、`XCBannerComponentUI`、`XCCollapseComponentUI`、`XCContainerComponentUI`、`XCSideMenuLayoutComponentUI`、`XCSplitButtonComponentUI`、`XCSplitterComponentUI`、`XCScrollBarComponentUI`、`XCScrollViewComponentUI`、`XCIconComponentUI`、`XCLinkComponentUI`、`XCFormComponentUI`、`XCDropdownComponentUI`。
- **图表**:`XCLineChartComponentUI`、`XCBarChartComponentUI`、`XCPieChartComponentUI`、`XCFunnelChartComponentUI`、`XCGaugeChartComponentUI`、`XCHeatmapChartComponentUI`、`XCKLineChartComponentUI`、`XCScatterChartComponentUI`、`XCFinancialChartComponentUI`。
- **其他**:`XCButtonAnimateComponentUI`、`XCButtonEffectsComponentUI`、`XCImageComponentUI`、`XCImageEditComponentUI`、`XCSpreadsheetComponent`、`XCResponsiveComponentUI`、`AnimationEngine`、`BannerEffect`。
#### 链式 Builder 用法示例
```java
p.button(20, 20, 120, 40, "点击我")
.onClick(id -> System.out.println("点击"))
.end();
p.timeline(260, 300, 260, 300, items)
.onItemClick((index, item) -> System.out.println("第 " + index + " 项:" + item.title))
.end();
p.calendar(240, 180, 240, 180).end();
```
#### 事件分发器(XCUIEventDispatcher)
炫彩 `XEle_RegEventC1` 原生只保留**最后一次**注册回调的 `Class`。若每个组件各写匿名子类,会互相覆盖导致事件错乱/不触发。因此全部事件统一走全局分发器:
```java
XCUIEventDispatcher.bind(hEle, XE_BNCLICK.getMessageCode(), "OnBtnClick", callback);
XCUIEventDispatcher.clear(hEle); // 销毁时清理事件处理器
```
#### 资源回收(XCUIResourceManager)
类似 Java GC 的全局资源回收系统,解决句柄泄漏:
```java
// 窗口销毁时自动回收注册的清理动作
XCUIResourceManager.instance().register(window.handle(), () -> XCButtonComponentUI.destroy(ins));
// 弱引用跟踪,对象不可达时自动清理
XCUIResourceManager.instance().track(referent, cleanup);
```
---
### 7.5 JadeViewGUI — WebView2 引擎 + 现代服务层
> **包**:`com.scm.all.export.JadeViewGUI` · **底层**:Microsoft Edge WebView2(Chromium)
该模块分为三个层次:
| 层次 | 类 | 职责 |
|:---|:---|:---|
| **应用门面** | `JadeViewApp` | Builder 启动、HTTP 服务器、协议路径、窗口创建、事件订阅 |
| **服务层** | `NettyDirectoryServer` / `NettyHttpClient` | 静态文件服务、WebSocket、分片传输、代理、压测 |
| **鉴权/存储** | `SaTokenUtil` / `JadeViewOss` / `JadeViewConfig` | RBAC 鉴权、对象存储、配置中心 |
| **核心封装** | `core/JadeView_*`(8 类) | WebView2 窗口/系统/对话框/托盘/菜单/IPC |
#### JadeViewApp 应用门面
```java
JadeViewApp app = JadeViewApp.builder("应用名", "签名≥6字符")
.rootPath(JadeViewApp.getJarDirectory())
.htmlEntry("index.html")
.devMode(true)
.httpPort(0)
.singleInstance(true)
.fileCache(true)
.enableRbac(new InMemoryRbacUserProvider().addUser("admin", "123", null, null))
.subscribe(-1, "app-ready", callback) // Init 前预订阅,不丢早期事件
.addApiRoute("/api/db/", handler) // 注册 API 路由
.launch();
int winId = app.windowBuilder("主窗口", 1200, 800)
.theme("Dark").alwaysOnTop(true).borderless().transparent(true)
.disableRightClick().ua("MyApp/1.0").build();
```
#### NettyDirectoryServer — HTTP 静态服务器 + WebSocket
```java
int port = NettyDirectoryServer.start(8080, "./www");
NettyDirectoryServer.addApiRoute("/api/", (method, body, headers, path) -> json);
NettyDirectoryServer.addProxyRoute("/api/", "http://localhost:3000/");
NettyDirectoryServer.setWebSocketListener(listener);
NettyDirectoryServer.broadcastText("hello");
NettyDirectoryServer.broadcastFile(file); // 自动分片
```
#### NettyHttpClient — HTTP 客户端 + 分片 + WebSocket
```java
NettyHttpClient.get(url, callback);
NettyHttpClient.downloadResumable(url, file, (recv, total) -> { }); // 断点续传
NettyHttpClient.chunkedUpload(url, data, callback); // 分片上传
NettyHttpClient.connectWebSocket(url, callback); // WebSocket 客户端
```
#### RBAC 鉴权(Sa-Token)
```java
SaTokenUtil.init(provider);
String token = SaTokenUtil.login("admin", "123456");
boolean isAdmin = SaTokenUtil.isAdmin(SaTokenUtil.getLoginIdByToken(token));
// MySQL 数据源(Druid + BCrypt)
try (MySqlRbacUserProvider mysql = new MySqlRbacUserProvider(url, user, pass)) {
SaTokenUtil.init(mysql);
}
```
#### JadeViewOss — 阿里云对象存储
```java
JadeViewOss oss = JadeViewOss.getInstance();
oss.init(endpoint, ak, sk, bucket);
String url = oss.upload("dir/file.txt", new File("C:\\file.txt"));
oss.download("dir/file.txt", new File("C:\\download.txt"));
oss.shutdown();
```
---
### 7.6 Report_Table — 锐浪报表 Grid++ 封装
> **包**:`com.scm.all.export.Report_Table` · **规模**:26 类 · 2,842 方法 · **底层**:COM
| 类名 | 方法数 | 功能 |
|:---|:---|:---|
| `Report_Table` | 298 | 报表主表(COM 初始化) |
| `Report_Chart` | 208 | 图表(柱状/饼图/折线/3D) |
| `Report_Column` | 206 | 列对象 |
| `Report_Export` | 172 | 导出(PDF/Excel/Word/HTML/图片) |
| `Report_TableSelect` | 147 | 选择集 |
| `Report_Control` | 132 | 报表控件 |
| `Report_TextBox` | 130 | 文本框 |
| `Report_Section` | 123 | 节/段落 |
| `Report_Graphics` | 123 | 图形绘制 |
| `Report_Printer` | 120 | 打印机管理 |
| `Report_Group` | 113 | 分组 |
| `Report_Utility` | 99 | 工具方法 |
| `Report_TableDesign` | 98 | 设计器 |
| `Report_Field` | 96 | 字段 |
| `Report_DetailGrid` | 94 | 明细网格 |
| `Report_FreeGrid` | 84 | 自由网格 |
| `Report_Image` | 79 | 图像对象 |
| `Report_Recordset` | 69 | 记录集 |
| `Report_Parameter` | 69 | 参数 |
| `Report_TablePrint` | 67 | 打印控制 |
| `Report_Font` | 64 | 字体 |
| `Report_CrossTab` | 60 | 交叉表 |
| `Report_CellBase` | 48 | 单元格基类 |
| `Report_Barcode` | 48 | 条形码 |
| `Report_Border` | 24 | 边框 |
| `Report_BinaryObject` | 20 | 二进制对象 |
```java
Report_Table.report_Table_RegisterComSilent("GridppReport.dll");
Report_Table.report_Table_SetComPointer(Report_Table.report_Table_InitPointer());
Report_Column.report_Column_SetWidth(columnHandle, 120);
Report_Export.report_Export_ExportToPDF("C:\\output.pdf");
```
---
### 7.7 窗口与进程工具
```java
// WindowOperationUtils
WindowOperationUtils.enumWindowClose("Notepad", null);
WindowOperationUtils.windowTop(hwnd, true, 0);
WindowOperationUtils.windowSetAlpha(hwnd, 128);
// ProcessAndThreadUtils
List procs = ProcessAndThreadUtils.processEnumInfo();
int pid = ProcessAndThreadUtils.processNameGetPid("chrome.exe");
```
---
### 7.8 EmailUtils — 邮件收发子系统
```java
EMailUtils.send("to@qq.com", "主题", "正文
", "from@139.com", "password");
EMailUtils.sendBatch(session, transport, recipients, "主题", "正文");
EMailUtils.forward(message, "forward@qq.com", "转发备注");
EMailUtils.getEmailDataSafe(session, host, user, pass, "imap", "INBOX", store, callback);
```
---
### 7.9 Print — 拼多多云打印
```java
PddPrintUtils pdd = new PddPrintUtils(); // ws://127.0.0.1:5000
pdd.connectBlocking(5000);
List printers = pdd.getPrinters();
PddPrintUtils.PrintResult result = pdd.print(task);
pdd.close();
```
---
### 7.10 hotkey — 键鼠驱动子系统
```java
// DD 驱动
DdDriver.btn(1); // 左键按下
DdDriver.mov(500, 300); // 绝对移动
DdDriver.key(30, 1); // 按键
// Ghost 驱动
GhostDriver.getDeviceListByModel();
GhostDriver.selectDeviceBySerialNumber("SN12345");
// Md 驱动
MdDriver.m_Delay(100);
```
---
### 7.11 Adobe Photoshop 自动化
```java
PhotoshopTool.openDocument("C:\\photo.psd");
PhotoshopTool.resizeImage(1920, 1080);
PhotoshopTool.applyGaussianBlurFilter(5.0);
PhotoshopTool.saveDocumentAs("C:\\out.jpg", "JPEG");
```
---
### 7.12 AI 集成模块
> **包**:`com.scm.all.AI` · **四大平台**:ClaudeCode / CloudLLM / CozeAI / RunNingHubAI
#### ClaudeCodeToolkit — Ollama 本地大模型(链式 API)
```java
import com.scm.all.AI.ClaudeCode.ClaudeCodeToolkit;
// 最简单用法
ClaudeCodeToolkit toolkit = new ClaudeCodeToolkit();
String reply = toolkit.chat("你好,请介绍一下自己");
// 链式调用
String reply2 = ClaudeCodeToolkit.create()
.model("qwen3:8b")
.stream(true)
.system("你是一个专业的 Java 程序员")
.skill("JSCM 全栈开发技能") // 激活内置技能
.chat("帮我写一个单例模式");
// 流式输出
toolkit.chatStream("写一首诗", chunk -> System.out.print(chunk.getContent()));
// 多轮对话
toolkit.user("我叫张三").chat();
System.out.println(toolkit.user("我叫什么名字?").chat());
```
#### 技能系统(Skill / SkillManager)
框架内置 **JSCM 全栈开发技能**(`src/main/resources/skills/SKILL.md`),整合了项目初始化、工具类、炫彩 UI、链式组件、JadeView、报表、AI、Lucene 等全部开发知识。`ClaudeCodeToolkit` 启动时自动加载并激活。
```java
SkillManager manager = new SkillManager();
manager.loadBundledSkills();
Skill skill = manager.findByName("JSCM 全栈开发技能");
manager.setActiveSkill(skill);
```
#### CloudLLMClient — 云端 LLM
```java
CloudLLMConfig config = CloudLLMConfig.presets().deepSeek("sk-xxx", "deepseek-chat");
CloudLLMClient client = new CloudLLMClient(config);
String reply = client.chat("你好");
// 推理内容(DeepSeek-R1 等思考模型)
CloudLLMClient.ChatResult result = client.chatDetailed("9.11 和 9.8 哪个大?");
System.out.println("正文: " + result.getContent());
if (result.hasReasoning()) System.out.println("推理: " + result.getReasoning());
```
#### CozeAI / RunNingHubAI
```java
CoZeWorkflowClient.setAccessToken("your-token");
String fileId = CoZeWorkflowClient.uploadFile("C:\\data.csv");
RunningHubClient client = RunningHubClient.builder().apiKey("...").build();
```
---
### 7.13 SearchLucene — 全文检索
```java
import com.scm.all.export.SearchLucene;
SearchLuceneChain.create("D:/index", SearchLuceneChain.smartChineseAnalyzer())
.add(SearchLuceneChain.document().string("id","1").text("title","你好").build())
.commit().close();
```
---
### 7.14 capstone — 反汇编引擎
```java
CapStone.CapStone_cs_open(TAG_CS_ARCH.CS_ARCH_X86, TAG_CS_MODE.CS_MODE_32);
CapStone.CapStone_cs_disasm(opcode, 0x401000, (mnemonic, opStr, size) ->
System.out.println(mnemonic + " " + opStr));
CapStone.CapStone_cs_free();
```
---
### 7.15 x64/x86 — 平台专用模块 与 32/64 位自适配聚合层
#### 一、平台专用模块(原始孪生类)
> **区别**:地址类型不同(`long` vs `int`),API 签名对称
```java
byte[] data = MemoryOperationUtilsX64.readMemoryBytes(hProcess, addr, 256);
MemoryOperationUtilsX64.writeMemoryInt(hProcess, addr, 0xDEADBEEF);
DebugBreakPointX64.runHardwareBreakpointX64(hProcess, threadId, addr,
BreakpointType.breakpoint_type_read.getValue(), 1, callback);
ApiHookOperationUtilsX64.installHook("user32.dll", "MessageBoxW", hookCallback, originalCallback);
```
#### 二、32/64 位自适配聚合层(推荐入口)
`com.scm.all.export` 下提供了一套聚合工具类,把上面「只差位宽」的孪生类合并成**单一入口**:调用方不需要写任何 `if (is32)`,由宿主 JVM 位宽自动决定走 x86 还是 x64 实现、以及加载哪一份 `Jscm.dll`。
| 聚合类 | 合并来源 | 覆盖能力 |
|:---|:---|:---|
| `InjectUtils` | `InjectX86` / `InjectX64` | 注入 DLL / Shellcode、远程调用导出函数、远程抛异常、远程启动 JVM、参数打包与字符串编码 |
| `MemoryUtils` | `MemoryOperationUtilsX86` / `X64` | 进程句柄、内存读写、多级指针、页属性与保护、内存/特征码搜索、搜索结果读取 |
| `RegistryUtils` | `RegistryOperationUtilsX86` / `X64` | 注册表建/开/关、枚举子键与值、类型查询、读/写字符串与整型、删除 |
| `VehUtils` | `VehDebugBreakPointX86` / `X64` | 注入 DLL + 目标进程内 VEH 抢异常实现硬件断点(**推荐**的断点方案) |
| `DebugBreakPointUtils` | `DebugBreakPointX86` / `X64` | `DebugActiveProcess` 调试器路线断点,x86/x64 回调统一为 `Callback#onHit(DebugContext)` |
```java
// 完全相同的代码,32 位 JVM / 64 位 JVM 都能跑
VehUtils.boot(); // 任何 native 调用前先 boot(幂等)
int pid = ProcessAndThreadUtils.processNameGetPid("Tutorial-x64.exe");
// 地址支持 "模块名!RVA" / "!RVA" / 绝对地址;断点类型与长度按页属性自动推导
// 超时省略时用默认值(VehUtils.DEFAULT_TIMEOUT_MS = 10000)
VehUtils.VehHit hit = VehUtils.breakPoint(pid, "user32!GetMessageW");
System.out.println(hit == null ? "未命中 / 超时" : "命中 " + hit);
int hProcess = MemoryUtils.openProcess(pid); // 句柄是 int,地址是 long
System.out.println(MemoryUtils.readInt(hProcess, 0x401000L));
MemoryUtils.closeProcess(hProcess);
// 路径形如 "HKEY_CURRENT_USER\\Software\\MyApp"
RegistryUtils.writeString("HKEY_CURRENT_USER\\Software\\MyApp", "Path", "C:\\App");
```
> **三条铁律**
> 1. **先 `boot()`**:任何 native 调用前需先执行 `VehUtils.boot()` / `MemoryUtils.boot()` 等(内部完成 `Jscm.dll` 目录配置 + 提权)。底层 `ModuleOperationUtilsJNI` 的静态块只在首次加载时按 `PathFileJSCM` 配置读取 DLL 目录,配晚了就固化在旧目录。
> 2. **位宽必须匹配**:宿主 JVM 位宽要和目标进程一致。跨进程调用统一口径:**进程句柄用 `int`,地址、DLL 基址与远程调用返回值用 `long`**;32 位目标的地址须 ≤ 4GB,超范围直接抛 `IllegalArgumentException` 而不是静默失败。
> 3. **断点优先用 `VehUtils`**:它只注入 DLL、由目标进程内部 VEH 抢异常,宿主不是调试器(`IsDebuggerPresent` 检测不到);只有目标自己需要被调试、或要利用完整调试事件流时才用 `DebugBreakPointUtils`。
> 详细规范、方法清单、实测限制与选型对比见 `src/main/resources/skills/jscm核心技能-SKILL.md` **§55 32/64 位自动切换工具类**。
---
## 八、数据结构、枚举与回调体系
### 8.1 Tag* 结构体(38 个)
| 类别 | 结构体 | 用途 |
|:---|:---|:---|
| 几何 | `TagPoint`/`TagPointF`/`TagPointD` | 整数/浮点/双精度坐标点 |
| 几何 | `TagRect`/`TagRectF`/`TagRectSize` | 矩形区域 |
| 几何 | `TagSize`/`TagPosition` | 尺寸与位置 |
| 间距 | `TagBorderSize`/`TagPadDingSize`/`TagMarginSize_` | 边框/内边距/外边距 |
| 窗口 | `TagWinInfo`/`TagMyWindwInfo` | 窗口信息 |
| 进程 | `TagProcessenTry32`/`TagThreadEntry32` | 进程/线程快照 |
| 模块 | `TagModuleenTry32`/`X64`/`X86` | 模块快照 |
| 内存 | `TagMemoryDataX64`/`X86`、`TagPmemory_Basic_InfoRmationX64`/`X86` | 内存数据/页属性 |
| 系统 | `TagINPUT`/`TagFontInfo`/`TagLOGFONTW` | 输入事件/字体 |
| 系统 | `TagHotKeyInfoTow`/`TagTokenPrivileges`/`TagLuid` | 热键/令牌 |
> **JNI 结构体铁律**:字段顺序必须与 C 结构体一一对应,**不可增删/调换**,否则破坏 JNI 内存布局。
### 8.2 JadeView_struct 结构体(6 个)
| 结构体 | 用途 |
|:---|:---|
| `WebViewWindowOptions` | WebView 窗口选项 |
| `WebViewSettings` | WebView 运行设置 |
| `FileDialogParams` | 文件对话框参数 |
| `MessageBoxParams` | 消息框参数 |
| `NotificationParams` | 系统通知参数 |
| `TrayMenuItemDesc` | 托盘菜单项描述 |
### 8.3 枚举常量
覆盖 XCGUI 全部控件状态、标志、类型定义:`WindowStyle`、`ButtonState`、`EditType`、`ImageDrawType`、`AnimationMove`、`BreakpointType`、`FontStyle`、`XcObjectType`、`CompleteWindowMessageEvent`(WM_*/XWM_*/XE_*)等。
### 8.4 回调接口体系(pfunc · 47 个)
| 接口 | 触发场景 |
|:---|:---|
| `IpcCallback` | JadeView IPC 事件(43 个 `*_callback`) |
| `IpcHandlerCallback` | IPC Handler(`Message01~Message100_callback`) |
| `JscmCallBack` | 通用 JNI 回调 |
| `WindowEventCallBack` | XCGUI 窗体事件(返回 `false`=未处理) |
| `XEleEventCallBack` | XC 元素事件(约 110 个 `On*`,返回 `true`=已处理) |
| `MemoryCallBack` | 内存搜索结果 |
| `ModuleCallBack` | 模块枚举回调 |
| `BreakpointCallBackX64`/`X86` | 硬件断点命中 |
| `CGridppReportEventHandler` | Grid++ 报表事件 |
| `CGRDesignerEventHandler` | 设计器事件 |
| `CGRDisplayViewerEventHandler`/`CGRPrintViewerEventHandler` | 显示/打印视图事件 |
| `JadeViewMsgBox` | 异步消息框/文件对话框回调 |
| `PermissionCallback` | 网页权限请求 |
| `Tag_cs_insnCallBack` | CapStone 反汇编指令 |
| `KeyCodeCallBack` | 键盘钩子 |
| `TokenCall` | 授权校验回调 |
| `ResponseEventCallBack` | 响应事件回调 |
> **回调防 GC 铁律**:所有 JNI 回调对象必须被 `static` 或长生命周期容器(如 `List