# 屏幕墙 (ScreenWall) - 实时窗口预览系统

## 项目概述

屏幕墙是一个基于Qt和AvRecorder开发的实时窗口预览系统，提供了完整的桌面和窗口内容捕获与显示功能。

## 功能特性

### 🖥️ 核心功能
- **实时桌面预览**: 在顶部区域显示完整的桌面内容
- **窗口图标列表**: 中间区域展示所有活动窗口的图标和缩略图
- **实时窗口预览**: 底部区域显示选中窗口的实时内容
- **最小化窗口支持**: 即使窗口最小化也能预览最后的画面

### ⚡ 性能优化
- **智能帧率控制**: 根据窗口状态自动调整捕获帧率
- **资源管理**: 限制同时捕获的窗口数量，避免系统过载
- **缓存机制**: 缓存窗口缩略图和图标，提升响应速度
- **多线程处理**: 异步捕获和渲染，保证UI流畅性

### 🎨 用户界面
- **响应式布局**: 自适应窗口大小变化
- **现代化设计**: 使用Fusion样式和自定义CSS
- **状态指示**: 实时显示捕获状态和窗口信息
- **交互友好**: 支持鼠标点击选择和双击操作

## 技术架构

### 核心组件

```
ScreenWallWidget (主组件)
├── DesktopPreviewWidget (桌面预览)
├── WindowIconListWidget (窗口列表)
└── WindowPreviewWidget (窗口预览)

EnhancedWindowFinder (窗口查找)
└── 扩展WindowFinder，支持图标和缩略图

ResourceManager (资源管理)
└── 管理捕获会话和缓存
```

### 技术栈
- **UI框架**: Qt6 (Widgets + OpenGL)
- **视频捕获**: AvRecorder (支持WGC/DXGI/GDI)
- **图形渲染**: OpenGL + 自定义着色器
- **系统API**: Windows API (DWM, Shell, PSAPI)

## 编译和运行

### 环境要求
- Windows 10/11 (支持Windows Graphics Capture)
- Qt 6.0+
- CMake 3.16+
- Visual Studio 2019+ 或 MinGW
- AvRecorder库 (项目依赖)

### 编译步骤

1. **克隆项目**
```bash
cd LearningSmartClient
```

2. **创建构建目录**
```bash
mkdir build
cd build
```

3. **配置CMake**
```bash
cmake ../ScreenWall -G "Visual Studio 16 2019" -A x64
# 或使用Ninja
cmake ../ScreenWall -G Ninja
```

4. **编译项目**
```bash
cmake --build . --config Release
```

5. **运行程序**
```bash
./bin/ScreenWall.exe
```

### 依赖库配置

确保以下库文件可用：
- `AvRecorder.lib` - 视频录制库
- `avcodec.lib`, `avformat.lib`, `avutil.lib` - FFmpeg库
- Qt6相关DLL文件

## 使用说明

### 基本操作

1. **启动应用**: 运行ScreenWall.exe
2. **开始预览**: 点击"启动"按钮开始屏幕墙功能
3. **选择窗口**: 在中间区域点击窗口图标进行预览
4. **桌面预览**: 点击顶部桌面预览区域
5. **停止预览**: 点击"停止"按钮结束功能

### 高级功能

- **刷新窗口列表**: 使用"刷新"按钮或F5键
- **窗口双击**: 双击窗口图标可以激活对应窗口
- **状态监控**: 查看状态栏了解当前运行状态

## 配置选项

### ScreenWallConfig 结构

```cpp
struct ScreenWallConfig {
    int desktopFrameRate = 15;      // 桌面捕获帧率
    int windowFrameRate = 30;       // 窗口捕获帧率
    int updateInterval = 2000;      // 窗口列表更新间隔(ms)
    QSize thumbnailSize = {120, 90}; // 缩略图尺寸
    int maxConcurrentCaptures = 3;   // 最大同时捕获数
};
```

### 性能调优建议

- **降低帧率**: 对于性能较低的设备，可以降低捕获帧率
- **减少同时捕获**: 限制同时预览的窗口数量
- **调整缩略图尺寸**: 较小的缩略图可以提升性能
- **关闭不必要的效果**: 在低端设备上禁用视觉效果

## API 参考

### ScreenWallWidget 主要接口

```cpp
class ScreenWallWidget : public QWidget {
public:
    // 配置和控制
    void setConfig(const ScreenWallConfig& config);
    void startScreenWall();
    void stopScreenWall();
    void refreshWindowList();
    
    // 信号
    void windowSelected(HWND hwnd, const QString& title);
    void desktopSelected();
};
```

### EnhancedWindowFinder 扩展接口

```cpp
class EnhancedWindowFinder {
public:
    struct ExtendedInfo {
        HWND hwnd;
        QString title;
        QIcon icon;
        QPixmap thumbnail;
        bool isMinimized;
        bool isVisible;
        // ... 更多属性
    };
    
    static QVector<ExtendedInfo> GetExtendedList(bool includeMinimized = true);
    static QIcon GetWindowIcon(HWND hwnd);
    static QPixmap GetWindowThumbnail(HWND hwnd, const QSize& size = QSize());
};
```

## 故障排除

### 常见问题

1. **编译错误**
   - 检查Qt6是否正确安装
   - 确认AvRecorder库路径正确
   - 验证CMake版本兼容性

2. **运行时错误**
   - 确保所有DLL文件在PATH中
   - 检查Windows版本是否支持WGC
   - 验证管理员权限（某些窗口需要）

3. **性能问题**
   - 降低捕获帧率
   - 减少同时捕获的窗口数
   - 关闭其他占用GPU的应用

4. **显示问题**
   - 更新显卡驱动
   - 检查OpenGL支持
   - 尝试不同的捕获方法

### 调试模式

在Debug模式下，程序会输出详细的调试信息：

```cpp
// 启用调试输出
QLoggingCategory::setFilterRules("*.debug=true");
```

## 扩展开发

### 添加新的捕获方法

1. 继承`IVideoCapturer`接口
2. 实现具体的捕获逻辑
3. 在`VideoRecorder`中注册新方法

### 自定义UI组件

1. 继承相应的基类
2. 重写绘制和事件处理方法
3. 集成到主界面布局中

### 性能监控

```cpp
// 添加性能计数器
class PerformanceMonitor {
public:
    void recordFrameTime(qint64 time);
    double getAverageFrameRate() const;
    void logPerformanceStats();
};
```

## 许可证

本项目基于现有的LearningSmartClient项目开发，遵循相同的许可证条款。

## 贡献指南

1. Fork项目仓库
2. 创建功能分支
3. 提交代码更改
4. 创建Pull Request

## 更新日志

### v1.0.0 (当前版本)
- ✅ 实现基本的屏幕墙功能
- ✅ 支持实时桌面和窗口预览
- ✅ 添加窗口图标列表
- ✅ 实现最小化窗口支持
- ✅ 性能优化和资源管理
- ✅ 现代化UI设计

### 计划功能
- 🔄 多显示器支持
- 🔄 窗口搜索和过滤
- 🔄 预览录制功能
- 🔄 自定义布局
- 🔄 插件系统

## 联系方式

如有问题或建议，请通过以下方式联系：
- 项目Issues
- 开发团队邮箱
- 技术支持论坛

---

**注意**: 本项目仅用于学习和研究目的，请遵守相关法律法规和隐私政策。