【C#源码】自定义窗口_同步创建浏览器
本帖最后由 mosheng 于 2025-8-18 17:38 编辑利用AI+MCP编写
# FBro动态浏览器窗口系统 - API文档
## 项目概述
**项目名称**: 自定义窗口_同步创建浏览器
**命名空间**: `自定义窗口_同步创建浏览器`
**版本**: 1.0.0.0
**框架**: .NET Framework 4.8
**架构**: WinForms + FBroSharp浏览器框架
## 核心功能概述
本项目是基于FBroSharp框架的动态浏览器窗口管理系统,主要功能包括:
- 🎯 **动态创建自定义浏览器窗口**:运行时动态创建WinForm窗口并嵌入FBro浏览器
- 🚀 **批量窗口管理**:支持同时创建和管理多个独立的浏览器窗口
- 🎨 **自定义窗口图标**:支持通过命令行参数设置窗口图标
- 🔧 **窗口生命周期管理**:完整的窗口创建、显示、关闭和资源清理
- 🧵 **线程安全操作**:跨线程UI访问的安全处理机制
## 主要公共类和接口
### 1. DynamicWindowManager 类
**用途**: 动态窗口管理器,负责创建和管理自定义浏览器窗口
#### 主要方法
```csharp
/// <summary>
/// 创建单个动态浏览器窗口
/// </summary>
/// <param name="title">窗口标题</param>
/// <param name="url">初始加载的URL</param>
/// <param name="iconPath">窗口图标路径(可选)</param>
/// <param name="width">窗口宽度</param>
/// <param name="height">窗口高度</param>
/// <param name="x">窗口X坐标(可选,默认居中)</param>
/// <param name="y">窗口Y坐标(可选,默认居中)</param>
/// <returns>创建的CustomBrowserWindow实例</returns>
public static CustomBrowserWindow CreateDynamicBrowserWindow(
string title = "FBro自定义浏览器",
string url = "https://www.baidu.com",
string iconPath = null,
int width = 1200,
int height = 800,
int? x = null,
int? y = null)
/// <summary>
/// 批量创建多个动态浏览器窗口
/// </summary>
/// <param name="windowConfigs">窗口配置数组</param>
/// <param name="iconPath">统一图标路径(可选)</param>
/// <returns>创建的窗口数组</returns>
public static CustomBrowserWindow[] CreateMultipleBrowserWindows(
WindowConfig[] windowConfigs,
string iconPath = null)
```
### 2. CustomBrowserWindow 类
**用途**: 自定义浏览器窗口,继承自Form,专门用于嵌入FBro浏览器
#### 主要属性
```csharp
/// <summary>
/// 浏览器面板句柄
/// </summary>
public IntPtr BrowserPanelHandle { get; }
/// <summary>
/// 浏览器面板尺寸
/// </summary>
public Size BrowserPanelSize { get; }
/// <summary>
/// 当前浏览器URL
/// </summary>
public string CurrentUrl { get; set; }
/// <summary>
/// 窗口创建时间
/// </summary>
public DateTime CreatedTime { get; }
/// <summary>
/// 是否已嵌入浏览器
/// </summary>
public bool HasBrowser { get; set; }
/// <summary>
/// 关联的浏览器实例
/// </summary>
public FBroSharpBrowser AssociatedBrowser { get; set; }
```
#### 主要方法
```csharp
/// <summary>
/// 构造函数
/// </summary>
/// <param name="iconPath">窗口图标路径(可选)</param>
public CustomBrowserWindow(string iconPath = null)
/// <summary>
/// 获取窗口详细信息
/// </summary>
/// <returns>窗口信息字符串</returns>
public string GetWindowInfo()
/// <summary>
/// 导航到指定URL
/// </summary>
/// <param name="url">目标URL</param>
public void NavigateToUrl(string url)
/// <summary>
/// 设置窗口标题(线程安全)
/// </summary>
/// <param name="title">窗口标题</param>
public void SetWindowTitle(string title)
/// <summary>
/// 更新导航按钮状态(线程安全)
/// </summary>
/// <param name="canGoBack">是否可以返回</param>
/// <param name="canGoForward">是否可以前进</param>
public void UpdateNavigationButtons(bool canGoBack, bool canGoForward)
```
### 3. Form1 类
**用途**: 主控制面板,提供图形化界面管理动态窗口
#### 主要方法
```csharp
/// <summary>
/// 构造函数
/// </summary>
/// <param name="iconPath">窗口图标路径(可选)</param>
public Form1(string iconPath = null)
```
### 4. WindowConfig 结构
**用途**: 窗口配置结构,用于批量创建窗口
```csharp
public struct WindowConfig
{
public string Title { get; set; } // 窗口标题
public string Url { get; set; } // 初始URL
public int Width { get; set; } // 窗口宽度
public int Height { get; set; } // 窗口高度
public int X { get; set; } // 窗口X坐标
public int Y { get; set; } // 窗口Y坐标
public WindowConfig(string title, string url, int width, int height, int x, int y)
{
Title = title;
Url = url;
Width = width;
Height = height;
X = x;
Y = y;
}
}
```
### 5. EnhancedBrowserEvent 类
**用途**: 增强的浏览器事件处理器,提供线程安全的事件回调
#### 主要方法
```csharp
/// <summary>
/// 清理窗口关联的浏览器映射关系
/// </summary>
/// <param name="window">要清理的窗口</param>
public static void CleanupWindowAssociation(CustomBrowserWindow window)
```
## 如何引用该项目
### 作为可执行程序
1. **直接运行**:
```bash
自定义窗口_同步创建浏览器.exe
```
2. **带图标参数运行**:
```bash
自定义窗口_同步创建浏览器.exe /icon "C:\icons\custom.ico"
```
### 作为类库引用
1. **添加项目引用**:
- 在Visual Studio中添加对本项目的引用
- 或者编译生成DLL后添加程序集引用
2. **引用命名空间**:
```csharp
using 自定义窗口_同步创建浏览器;
```
## 示例代码
### 创建单个浏览器窗口
```csharp
using 自定义窗口_同步创建浏览器;
// 创建默认浏览器窗口
var window = DynamicWindowManager.CreateDynamicBrowserWindow();
// 创建自定义配置的浏览器窗口
var customWindow = DynamicWindowManager.CreateDynamicBrowserWindow(
title: "我的浏览器",
url: "https://www.example.com",
iconPath: @"C:\icons\browser.ico",
width: 1400,
height: 900,
x: 100,
y: 50
);
// 获取窗口信息
string info = customWindow.GetWindowInfo();
Console.WriteLine(info);
```
### 批量创建浏览器窗口
```csharp
// 定义窗口配置
var configs = new WindowConfig[]
{
new WindowConfig("百度搜索", "https://www.baidu.com", 1000, 700, 100, 100),
new WindowConfig("谷歌搜索", "https://www.google.com", 1000, 700, 200, 200),
new WindowConfig("必应搜索", "https://www.bing.com", 1000, 700, 300, 300)
};
// 批量创建窗口
var windows = DynamicWindowManager.CreateMultipleBrowserWindows(
configs,
@"C:\icons\browser.ico"
);
// 遍历创建的窗口
foreach (var window in windows)
{
Console.WriteLine($"窗口已创建: {window.Text}");
}
```
### 主程序启动
```csharp
using System;
using System.Windows.Forms;
// 初始化FBro框架
// ... FBro初始化代码 ...
// 启动主控制面板
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
```
## 依赖项
### 必需的.NET框架
- **.NET Framework 4.8** 或更高版本
### 第三方库依赖
- **FBroSharp.Common (4.20.38)** - FBro浏览器框架核心库
- **FBroSharp.x64 (4.20.38)** - 64位平台支持
- **FBroSharp.x86 (4.20.38)** - 32位平台支持
### 系统要求
- **Windows 7** 或更高版本
- **Visual C++ Redistributable** (FBro框架要求)
- **足够的内存**(每个浏览器实例约需100-200MB)
## 编译与使用说明
### 编译要求
1. **Visual Studio 2017** 或更高版本
2. **NuGet包管理器** 用于自动还原FBroSharp依赖包
3. **目标平台**: AnyCPU (推荐)
### 编译步骤
1. **克隆或下载项目**
2. **还原NuGet包**:
```bash
nuget restore
```
3. **编译项目**:
```bash
msbuild /p:Configuration=Release
```
### 部署说明
1. **复制输出文件**:将`bin/Release`目录下的所有文件复制到目标机器
2. **确保FBro依赖**:确保`FBroSubprocess.exe`等文件存在
3. **缓存目录**:程序会自动创建`Cache`目录用于浏览器缓存
### 配置说明
程序支持以下配置选项:
- **缓存路径**: 自动在程序目录下创建`Cache`文件夹
- **本地化**: 默认使用中文(zh-CN)
- **日志级别**: 默认只记录错误级别日志
- **多线程消息循环**: 默认启用,提升性能
## 注意事项
1. **线程安全**: 所有UI操作都已经过线程安全处理
2. **资源管理**: 窗口关闭时会自动清理浏览器资源和图标资源
3. **异常处理**: 完善的异常处理机制,避免程序崩溃
4. **性能优化**: 使用防抖机制优化窗口大小调整性能
## 技术支持
如遇到技术问题,请检查:
1. FBroSharp框架是否正确安装
2. .NET Framework版本是否符合要求
3. 控制台输出的详细错误信息
4. `Cache`目录的读写权限
---
*文档版本: 1.0.0 | 最后更新: 2025年*
**** Hidden Message ***** 很好。 下载来学习学习
很好。 下载来学习学习 很好。 下载来学习学习 很好,下载来看看~ 很好,下载来看看~
页:
[1]