zhuizhu 1070734c3b 重构目录 hai 7 meses
..
CMakeLists.txt 1070734c3b 重构目录 hai 7 meses
CMakeLists_simple.txt 1070734c3b 重构目录 hai 7 meses
README.md 1070734c3b 重构目录 hai 7 meses
README_simple.md 1070734c3b 重构目录 hai 7 meses
main111.cpp 1070734c3b 重构目录 hai 7 meses
main_simple.cpp 1070734c3b 重构目录 hai 7 meses
screenwall_simple.cpp 1070734c3b 重构目录 hai 7 meses
screenwall_simple.h 1070734c3b 重构目录 hai 7 meses
screenwall_widget.cpp 1070734c3b 重构目录 hai 7 meses
screenwall_widget.h 1070734c3b 重构目录 hai 7 meses

README.md

屏幕墙 (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. 克隆项目

    cd LearningSmartClient
    
  2. 创建构建目录

    mkdir build
    cd build
    
  3. 配置CMake

    cmake ../ScreenWall -G "Visual Studio 16 2019" -A x64
    # 或使用Ninja
    cmake ../ScreenWall -G Ninja
    
  4. 编译项目

    cmake --build . --config Release
    
  5. 运行程序

    ./bin/ScreenWall.exe
    

依赖库配置

确保以下库文件可用:

  • AvRecorder.lib - 视频录制库
  • avcodec.lib, avformat.lib, avutil.lib - FFmpeg库
  • Qt6相关DLL文件

使用说明

基本操作

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

高级功能

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

配置选项

ScreenWallConfig 结构

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

性能调优建议

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

API 参考

ScreenWallWidget 主要接口

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 扩展接口

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模式下,程序会输出详细的调试信息:

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

扩展开发

添加新的捕获方法

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

自定义UI组件

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

性能监控

// 添加性能计数器
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
  • 开发团队邮箱
  • 技术支持论坛

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