Flutter全局键盘钩子插件uiohook_dart的使用
Flutter全局键盘钩子插件uiohook_dart的使用
Uiohook
跨平台桌面键盘和鼠标钩子库,基于 libuiohook
的 FFI 实现。
开始使用
在纯 Dart 项目中使用 uiohook_dart
。如果要在 Flutter 项目中使用,还需要添加 uiohook_flutter
。
uiohook_flutter
只包含预构建的 libuiohook
二进制文件,并提供了一个 libuioHookBinary
变量,可以用来初始化 UiohookDart
。
使用方法
初始化
首先用 libuiohook
二进制文件进行初始化,或者使用 uiohook_flutter
来自动包含预构建的二进制文件。
// 使用 uiohook_flutter 包含预构建的二进制文件
UioHookDart.init(libuioHookBinary);
完成操作后,记得释放资源:
UioHookDart.dispose();
开始监听
开始监听鼠标和键盘事件,并在 onComplete
回调中获取结果。为了获取事件,有两个回调函数:
interceptor
:直接从隔离区获取事件,因此不会与应用程序的其余部分共享内存。如果要抑制事件,返回true
;否则返回false
。onEvents
:也会提供hookEvents
,但会在主线程中提供,可以根据事件执行任务。
UioHookDart.startListener(
interceptor: (HookEvent event) {
// 抑制键盘按下事件
if (event.type == EventType.keyPressed) {
return true;
}
// 传递其他事件
return false;
},
onEvents: (HookEvent event) {
// 使用鼠标、键盘事件
},
onComplete: (int status) {
print("StartListener: $status");
},
);
停止监听
如果监听器已启动,调用 stopListener
将触发 startListener
的 onComplete
回调并返回结果。
UioHookDart.stopListener();
获取屏幕信息
获取有关屏幕以及外部连接显示器的详细信息。
UioHookDart.getScreenData();
模拟鼠标/键盘事件
构造一个 MouseEventData
对象,指定必要的字段和 EventType
,然后传递给 sendMouseData
方法。
UioHookDart.sendMouseData(
MouseEventData(x: 500, y: 500),
EventType.mouseMoved,
);
同样地,我们可以使用 sendKeyboardData
发送键盘数据,并使用 sendMouseWheelData
发送滚动事件。
其他API
- 使用
getKeyboardAutoRepeatRate
获取键盘自动重复率。 - 使用
getKeyboardAutoRepeatDelay
获取键盘自动重复延迟。 - 使用
getPointerAccelerationMultiplier
获取鼠标加速倍数。 - 使用
getPointerSensitivity
获取鼠标灵敏度。 - 使用
getMultiClickTime
获取双击/三击间隔时间。 - 使用
hookGetPointerAccelerationThreshold
获取鼠标加速阈值。
请参阅示例以了解各种用法的实际运行示例。
示例代码
import 'package:uiohook_dart/uiohook_dart.dart';
void main(List<String> arguments) async {
// 初始化 uiohook_dart,使用 uiohook_flutter 包含的预构建二进制文件
await UioHookDart.init(libuioHookBinary);
// 打印屏幕数据
print(await UioHookDart.getScreenData());
// 处理事件的回调函数
void handleEvents(HookEvent event) {
print(event);
if (event.type == EventType.mouseClicked) {
// 移动鼠标
UioHookDart.sendMouseData(
MouseEventData(x: 500, y: 500),
EventType.mouseMoved,
);
}
}
// 拦截事件的回调函数
bool hookInterceptor(HookEvent event) {
if (event.type == EventType.keyPressed) {
return true;
}
return false;
}
// 开始监听键盘和鼠标事件
await UioHookDart.startListener(
onEvents: handleEvents,
interceptor: hookInterceptor,
onComplete: (int status) {
print("StartListener: $status");
},
);
// 等待 10 秒
await Future.delayed(const Duration(seconds: 10));
// 停止监听并打印停止状态
int status = await UioHookDart.stopListener();
print("StopStatus: $status");
// 释放资源
UioHookDart.dispose();
}
更多关于Flutter全局键盘钩子插件uiohook_dart的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复