键盘事件模拟
概述
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)参数:
| 参数 | 类型 | 说明 |
|---|---|---|
text | string | 要输入的文本内容,支持中文和特殊字符 |
delay | int | 每个字符之间的延迟时间(毫秒) |
示例:
csharp
// 快速输入
advanced.DispatchKeyInputText("快速输入测试", 1);
// 慢速输入(模拟真实用户)
advanced.DispatchKeyInputText("慢速输入测试", 50);DispatchKeyClick
功能描述: 模拟单个按键的点击,支持修饰键组合
语法:
csharp
void DispatchKeyClick(int windowsVirtualKeyCode, int modifiers, int delay, bool isKeypad)参数:
| 参数 | 类型 | 说明 |
|---|---|---|
windowsVirtualKeyCode | int | Windows虚拟按键代码 |
modifiers | int | 修饰键组合:Alt=1, Ctrl=2, Meta/Command=4, Shift=8 |
delay | int | 按键延迟时间(毫秒) |
isKeypad | bool | 是否来自键盘(通常设为true) |
常用按键代码
基础按键
| 按键 | 虚拟键码 | 说明 |
|---|---|---|
| Enter | 13 | 回车键 |
| Tab | 9 | 制表符键 |
| Escape | 27 | 退出键 |
| Space | 32 | 空格键 |
| Backspace | 8 | 退格键 |
| Delete | 46 | 删除键 |
字母按键
| 按键 | 虚拟键码 | 按键 | 虚拟键码 |
|---|---|---|---|
| A | 65 | N | 78 |
| B | 66 | O | 79 |
| C | 67 | P | 80 |
| D | 68 | Q | 81 |
| E | 69 | R | 82 |
| F | 70 | S | 83 |
| G | 71 | T | 84 |
| H | 72 | U | 85 |
| I | 73 | V | 86 |
| J | 74 | W | 87 |
| K | 75 | X | 88 |
| L | 76 | Y | 89 |
| M | 77 | Z | 90 |
数字按键
| 按键 | 虚拟键码 | 按键 | 虚拟键码 |
|---|---|---|---|
| 0 | 48 | 5 | 53 |
| 1 | 49 | 6 | 54 |
| 2 | 50 | 7 | 55 |
| 3 | 51 | 8 | 56 |
| 4 | 52 | 9 | 57 |
功能按键
| 按键 | 虚拟键码 | 按键 | 虚拟键码 |
|---|---|---|---|
| F1 | 112 | F7 | 118 |
| F2 | 113 | F8 | 119 |
| F3 | 114 | F9 | 120 |
| F4 | 115 | F10 | 121 |
| F5 | 116 | F11 | 122 |
| F6 | 117 | F12 | 123 |
方向键
| 按键 | 虚拟键码 |
|---|---|
| ↑ | 38 |
| ↓ | 40 |
| ← | 37 |
| → | 39 |
修饰键组合
| 修饰键 | 数值 | 说明 |
|---|---|---|
| Alt | 1 | Alt键 |
| Ctrl | 2 | Ctrl键 |
| Meta/Command | 4 | Windows键/Cmd键 |
| Shift | 8 | Shift键 |
组合修饰键
修饰键数值计算: 将对应的修饰键数值相加
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);
}
}最佳实践
- 延迟设置:在键盘操作之间添加适当延迟,模拟真实用户输入速度
- 文本处理:对于特殊字符和中文,使用
DispatchKeyInputText而不是单个按键 - 错误处理:使用
using语句确保VIP控制接口正确释放 - 组合键:正确计算修饰键的数值组合
- 测试验证:在实际使用前测试按键代码的准确性
注意事项
- 焦点问题:确保目标输入框有焦点再进行键盘输入
- 中文输入:中文输入建议使用
DispatchKeyInputText方法 - 延迟控制:根据应用程序响应速度调整延迟时间
- 特殊字符:某些特殊字符可能需要使用组合键或特定的虚拟键码
//
// 摘要:
// 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:
// 事件是否从键盘生成