Skip to content

键盘事件模拟

概述

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();
    
    // 输入中文文本,每个字符间隔2毫秒
    advanced.DispatchKeyInputText("你好", 2);
    
    // 输入英文文本
    advanced.DispatchKeyInputText("Hello World", 10);
    
    // 输入数字和符号
    advanced.DispatchKeyInputText("123@abc.com", 5);
}

复杂文本输入示例

csharp
public void InputFormData(IFBroSharpBrowser browser)
{
    using (var vip_control = browser.GetVIPControl())
    {
        var advanced = vip_control.GetAdvancedControl();
        
        // 清空现有内容(Ctrl+A + Delete)
        advanced.DispatchKeyClick(65, 2, 100, true);  // Ctrl+A
        Thread.Sleep(50);
        advanced.DispatchKeyClick(46, 0, 100, true);  // Delete
        Thread.Sleep(50);
        
        // 输入新内容
        advanced.DispatchKeyInputText("张三", 5);
        Thread.Sleep(100);
        
        // 按Tab键切换到下一个输入框
        advanced.DispatchKeyClick(9, 0, 100, true);   // Tab
        Thread.Sleep(100);
        
        advanced.DispatchKeyInputText("13800138000", 5);
    }
}

2. 单键点击

基础按键操作

csharp
using (var vip_control = browser.GetVIPControl())
{
    var advanced = vip_control.GetAdvancedControl();
    
    // 按Enter键,延迟500毫秒
    advanced.DispatchKeyClick(13, 0, 500, true);
    
    // 按Tab键
    advanced.DispatchKeyClick(9, 0, 100, true);
    
    // 按Escape键
    advanced.DispatchKeyClick(27, 0, 100, true);
}

组合键操作

csharp
using (var vip_control = browser.GetVIPControl())
{
    var advanced = vip_control.GetAdvancedControl();
    
    // Ctrl+C (复制)
    advanced.DispatchKeyClick(67, 2, 100, true);
    
    // Ctrl+V (粘贴)
    advanced.DispatchKeyClick(86, 2, 100, true);
    
    // Ctrl+A (全选)
    advanced.DispatchKeyClick(65, 2, 100, true);
    
    // Shift+Tab (反向Tab)
    advanced.DispatchKeyClick(9, 8, 100, true);
    
    // Alt+F4 (关闭窗口)
    advanced.DispatchKeyClick(115, 1, 100, true);
}

方法详细说明

DispatchKeyInputText

功能描述: 输入连续文本,支持中文、英文、数字和符号

语法:

csharp
void DispatchKeyInputText(string text, int delay)

参数:

参数类型说明
textstring要输入的文本内容,支持中文和特殊字符
delayint每个字符之间的延迟时间(毫秒)

示例:

csharp
// 快速输入
advanced.DispatchKeyInputText("快速输入测试", 1);

// 慢速输入(模拟真实用户)
advanced.DispatchKeyInputText("慢速输入测试", 50);

DispatchKeyClick

功能描述: 模拟单个按键的点击,支持修饰键组合

语法:

csharp
void DispatchKeyClick(int windowsVirtualKeyCode, int modifiers, int delay, bool isKeypad)

参数:

参数类型说明
windowsVirtualKeyCodeintWindows虚拟按键代码
modifiersint修饰键组合:Alt=1, Ctrl=2, Meta/Command=4, Shift=8
delayint按键延迟时间(毫秒)
isKeypadbool是否来自键盘(通常设为true)

常用按键代码

基础按键

按键虚拟键码说明
Enter13回车键
Tab9制表符键
Escape27退出键
Space32空格键
Backspace8退格键
Delete46删除键

字母按键

按键虚拟键码按键虚拟键码
A65N78
B66O79
C67P80
D68Q81
E69R82
F70S83
G71T84
H72U85
I73V86
J74W87
K75X88
L76Y89
M77Z90

数字按键

按键虚拟键码按键虚拟键码
048553
149654
250755
351856
452957

功能按键

按键虚拟键码按键虚拟键码
F1112F7118
F2113F8119
F3114F9120
F4115F10121
F5116F11122
F6117F12123

方向键

按键虚拟键码
38
40
37
39

修饰键组合

修饰键数值说明
Alt1Alt键
Ctrl2Ctrl键
Meta/Command4Windows键/Cmd键
Shift8Shift键

组合修饰键

修饰键数值计算: 将对应的修饰键数值相加

csharp
// Ctrl + Shift + 某键 = 2 + 8 = 10
advanced.DispatchKeyClick(某键码, 10, 100, true);

// Alt + Ctrl + 某键 = 1 + 2 = 3
advanced.DispatchKeyClick(某键码, 3, 100, true);

// Ctrl + Alt + Shift + 某键 = 2 + 1 + 8 = 11
advanced.DispatchKeyClick(某键码, 11, 100, true);

API说明:

csharp
// 摘要:
//     VIP_高级键盘_单击
//
// 参数:
//   windowsVirtualKeyCode: Windows虚拟按键代码(默认值:0)
//   modifiers: 表示按下的修饰键。Alt=1, Ctrl=2, Meta/Command=4, Shift=8(默认值:0)
//   delay: 单位:毫秒
//   isKeypad: 事件是否从键盘生成
void DispatchKeyClick(int windowsVirtualKeyCode, int modifiers, int delay, bool isKeypad);

实际应用示例

1. 表单自动填写

csharp
public void AutoFillForm(IFBroSharpBrowser browser)
{
    using (var vip_control = browser.GetVIPControl())
    {
        var advanced = vip_control.GetAdvancedControl();
        
        // 填写姓名
        advanced.DispatchKeyInputText("张三", 10);
        advanced.DispatchKeyClick(9, 0, 200, true);  // Tab到下一个字段
        
        // 填写邮箱
        advanced.DispatchKeyInputText("zhangsan@example.com", 5);
        advanced.DispatchKeyClick(9, 0, 200, true);  // Tab到下一个字段
        
        // 填写电话
        advanced.DispatchKeyInputText("13800138000", 5);
        advanced.DispatchKeyClick(13, 0, 300, true); // 按Enter提交
    }
}

2. 文本编辑操作

csharp
public void EditText(IFBroSharpBrowser browser, string newText)
{
    using (var vip_control = browser.GetVIPControl())
    {
        var advanced = vip_control.GetAdvancedControl();
        
        // 全选现有文本
        advanced.DispatchKeyClick(65, 2, 100, true);  // Ctrl+A
        Thread.Sleep(50);
        
        // 删除现有文本
        advanced.DispatchKeyClick(46, 0, 100, true);  // Delete
        Thread.Sleep(50);
        
        // 输入新文本
        advanced.DispatchKeyInputText(newText, 10);
        
        // 保存 (Ctrl+S)
        advanced.DispatchKeyClick(83, 2, 100, true);
    }
}

3. 快捷键操作

csharp
public void PerformShortcuts(IFBroSharpBrowser browser)
{
    using (var vip_control = browser.GetVIPControl())
    {
        var advanced = vip_control.GetAdvancedControl();
        
        // 刷新页面 (F5)
        advanced.DispatchKeyClick(116, 0, 500, true);
        Thread.Sleep(1000);
        
        // 打开开发者工具 (F12)
        advanced.DispatchKeyClick(123, 0, 300, true);
        Thread.Sleep(500);
        
        // 查找 (Ctrl+F)
        advanced.DispatchKeyClick(70, 2, 200, true);
        Thread.Sleep(300);
        
        // 输入搜索内容
        advanced.DispatchKeyInputText("搜索关键词", 10);
    }
}

最佳实践

  1. 延迟设置:在键盘操作之间添加适当延迟,模拟真实用户输入速度
  2. 文本处理:对于特殊字符和中文,使用DispatchKeyInputText而不是单个按键
  3. 错误处理:使用using语句确保VIP控制接口正确释放
  4. 组合键:正确计算修饰键的数值组合
  5. 测试验证:在实际使用前测试按键代码的准确性

注意事项

  1. 焦点问题:确保目标输入框有焦点再进行键盘输入
  2. 中文输入:中文输入建议使用DispatchKeyInputText方法
  3. 延迟控制:根据应用程序响应速度调整延迟时间
  4. 特殊字符:某些特殊字符可能需要使用组合键或特定的虚拟键码
//
// 摘要:
//     VIP_高级键盘_输入文本
//
// 参数:
//   text:
//     输入文本,可以是中文,连续的文本
//
//   delay:
//     单位:毫秒;
void DispatchKeyInputText(string text, int delay);

键盘单击

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

     advanced.DispatchKeyClick(43, 0, 500, true);
 }
 
 //
// 摘要:
//     VIP_高级键盘_单击
//
// 参数:
//   windowsVirtualKeyCode:
//     Windows虚拟按键代码(默认值:0)。
//
//   modifiers:
//     表示按下的修饰键。Alt=1, Ctrl=2, Meta/Command=4, Shift=8(默认值:0)。
//
//   delay:
//     单位:毫秒;
//
//   isKeypad:
//     事件是否从键盘生成

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