Skip to content

VIP鼠标事件模拟

概述

FBro提供了完整的鼠标事件模拟功能,支持鼠标点击、移动、滚轮操作等。所有鼠标操作都需要通过VIP控制接口来实现。

基础用法

获取控制接口

所有鼠标操作都需要先获取VIP控制接口:

csharp
using (var vip_control = browser.GetVIPControl())
{
    var advanced = vip_control.GetAdvancedControl();
    
    // 在这里执行鼠标操作
}

鼠标操作方法

1. 鼠标点击

简单点击

csharp
using (var vip_control = browser.GetVIPControl())
{
    var advanced = vip_control.GetAdvancedControl();
    
    // 在坐标(100, 200)处点击左键,延迟50毫秒
    advanced.DispatchMouseClick(100, 200, 0, 50);
}

精确点击(推荐)

csharp
// 模拟完整的点击过程:按下 -> 延迟 -> 释放
using (var vip_control = browser.GetVIPControl())
{
    var advanced = vip_control.GetAdvancedControl();
    
    advanced.DispatchMouseDown(buttonX, buttonY, 0);  // 按下左键
    Thread.Sleep(50);                                 // 延迟50毫秒
    advanced.DispatchMouseUp(buttonX, buttonY, 0);    // 释放左键
}

2. 鼠标移动

csharp
using (var vip_control = browser.GetVIPControl())
{
    var advanced = vip_control.GetAdvancedControl();
    
    // 移动鼠标到坐标(32, 40)
    advanced.DispatchMouseMove(32, 40);
    Thread.Sleep(100);  // 延迟等待移动完成
}

3. 鼠标滚轮

csharp
using (var vip_control = browser.GetVIPControl())
{
    var advanced = vip_control.GetAdvancedControl();
    
    // 垂直滚动:向上滚动1000像素(weely为负数)
    advanced.DispatchMouseWeel(0, 0, 0, -1000);
    
    // 水平滚动:向右滚动500像素(weelx为正数)
    advanced.DispatchMouseWeel(0, 0, 500, 0);
}

4. 完整操作示例

csharp
using (var vip_control = browser.GetVIPControl())
{
    var advanced = vip_control.GetAdvancedControl();

    // 1. 滚动页面到顶部(weely为负数向上滚动)
    advanced.DispatchMouseWeel(0, 0, 0, -1000);
    Thread.Sleep(500);

    // 2. 移动鼠标到目标位置
    advanced.DispatchMouseMove(32, 40);
    Thread.Sleep(100);

    // 3. 点击目标元素
    advanced.DispatchMouseClick(32, 40, 0, 50);
}

方法详细说明

DispatchMouseClick

语法:

csharp
void DispatchMouseClick(int x, int y, int type, int delay)

参数:

参数类型说明
xint点击的X坐标
yint点击的Y坐标
typeint鼠标按键类型:0=左键,1=中键,2=右键
delayint点击延迟时间(毫秒)

DispatchMouseDown

语法:

csharp
void DispatchMouseDown(int x, int y, int type)

参数:

参数类型说明
xint按下的X坐标
yint按下的Y坐标
typeint鼠标按键类型:0=左键,1=中键,2=右键

DispatchMouseUp

语法:

csharp
void DispatchMouseUp(int x, int y, int type)

参数:

参数类型说明
xint释放的X坐标
yint释放的Y坐标
typeint鼠标按键类型:0=左键,1=中键,2=右键

DispatchMouseMove

语法:

csharp
void DispatchMouseMove(int x, int y)

参数:

参数类型说明
xint目标X坐标
yint目标Y坐标

DispatchMouseWeel

语法:

csharp
void DispatchMouseWeel(int x, int y, int weelx, int weely)

参数:

参数类型说明
xint滚轮事件的X坐标
yint滚轮事件的Y坐标
weelxint水平滚动:负数向左,正数向右(像素单位)
weelyint垂直滚动:负数向上,正数向下(像素单位)

API说明:

csharp
// 参数:
//   x: 横坐标
//   y: 纵坐标  
//   weelx: 横向滚动:负数向左,正数向右,以像素点位单位
//   weely: 纵向滚动:负数向上,正数向下,以像素点位单位
void DispatchMouseWeel(int x, int y, int weelx, int weely);

实际应用示例

1. 模拟用户浏览行为

csharp
public void SimulateUserBrowsing(IFBroSharpBrowser browser)
{
    using (var vip_control = browser.GetVIPControl())
    {
        var advanced = vip_control.GetAdvancedControl();
        
        // 滚动查看页面内容
        for (int i = 0; i < 3; i++)
        {
            advanced.DispatchMouseWeel(400, 300, 0, 300);  // 向下滚动(weely为正数)
            Thread.Sleep(1000);  // 模拟阅读时间
        }
        
        // 返回顶部
        advanced.DispatchMouseWeel(400, 300, 0, -900);   // 向上滚动(weely为负数)
        Thread.Sleep(500);
    }
}

2. 点击特定按钮

csharp
public void ClickButton(IFBroSharpBrowser browser, int buttonX, int buttonY)
{
    using (var vip_control = browser.GetVIPControl())
    {
        var advanced = vip_control.GetAdvancedControl();
        
        // 先移动到按钮位置(模拟真实用户行为)
        advanced.DispatchMouseMove(buttonX, buttonY);
        Thread.Sleep(100);
        
        // 执行点击
        advanced.DispatchMouseDown(buttonX, buttonY, 0);
        Thread.Sleep(50);
        advanced.DispatchMouseUp(buttonX, buttonY, 0);
    }
}

3. 拖拽操作

拖拽操作原理: 拖拽 = 鼠标按下左键 + 移动 + 释放左键

csharp
public void DragElement(IFBroSharpBrowser browser, int fromX, int fromY, int toX, int toY)
{
    using (var vip_control = browser.GetVIPControl())
    {
        var advanced = vip_control.GetAdvancedControl();
        
        // 移动到起始位置
        advanced.DispatchMouseMove(fromX, fromY);
        Thread.Sleep(100);
        
        // 按下鼠标左键(开始拖拽)
        advanced.DispatchMouseDown(fromX, fromY, 0);
        Thread.Sleep(100);
        
        // 拖拽到目标位置
        advanced.DispatchMouseMove(toX, toY);
        Thread.Sleep(200);
        
        // 释放鼠标左键(结束拖拽)
        advanced.DispatchMouseUp(toX, toY, 0);
    }
}

简化拖拽操作

csharp
// 核心拖拽流程:按下 → 移动 → 释放
using (var vip_control = browser.GetVIPControl())
{
    var advanced = vip_control.GetAdvancedControl();
    
    advanced.DispatchMouseDown(fromX, fromY, 0);  // 起始位置按下左键
    Thread.Sleep(50);
    advanced.DispatchMouseMove(toX, toY);         // 移动到目标位置  
    Thread.Sleep(50);
    advanced.DispatchMouseUp(toX, toY, 0);        // 目标位置释放左键
}

最佳实践

  1. 添加延迟:在操作之间添加适当的延迟,模拟真实用户行为
  2. 坐标精确:确保点击坐标准确,可以先获取元素位置
  3. 异常处理:使用using语句确保VIP控制接口正确释放
  4. 操作顺序:对于复杂操作,按照鼠标移动→按下→移动→释放的顺序执行
  5. 测试验证:在实际使用前测试坐标和操作的准确性

FBro点击按钮示例代码:

// 模拟鼠标点击搜索按钮
using (var vip_control = browser.GetVIPControl())
{
    var advanced = vip_control.GetAdvancedControl();
    
    advanced.DispatchMouseDown(buttonX, buttonY, 0);
    Thread.Sleep(50);  
    advanced.DispatchMouseUp(buttonX, buttonY, 0);

}

如果文档对您有帮助,欢迎 请喝咖啡 ☕ | 软件发布 | 源码购买