# 屏幕墙 (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 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 - 开发团队邮箱 - 技术支持论坛 --- **注意**: 本项目仅用于学习和研究目的,请遵守相关法律法规和隐私政策。