Qt for Mac模拟鼠标以及键盘事件
来源:互联网 发布:金顶牛牛源码架设教程 编辑:程序博客网 时间:2024/06/05 13:34
在Mac osx中模拟鼠标或者键盘事件需要用到苹果提供的api,之前的博文有提到过如何使用苹果开发文档,这里将不再详细解释函数说明
首先,包含头文件
#ifdef Q_OS_MAC#include <Carbon/Carbon.h>#include <ApplicationServices/ApplicationServices.h>#endif
模拟鼠标左键按下
CGPoint point; point.x = x; point.y = y; CGEventRef theEvent = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, point, kCGMouseButtonLeft); CGEventPost(kCGHIDEventTap, theEvent); CFRelease(theEvent);
kCGEventLeftMouseDown 鼠标左键按下
kCGEventLeftMouseUp 鼠标左键松开
kCGEventRightMouseDown 鼠标右键按下
kCGEventRightMouseUp鼠标右键松开
模拟鼠标双击
CGEventRef theEvent = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, CGPointMake(x, y), kCGMouseButtonLeft); CGEventPost(kCGHIDEventTap, theEvent); CGEventSetType(theEvent, kCGEventLeftMouseUp); CGEventPost(kCGHIDEventTap, theEvent); CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, 2); CGEventSetType(theEvent, kCGEventLeftMouseDown); CGEventPost(kCGHIDEventTap, theEvent); CGEventSetType(theEvent, kCGEventLeftMouseUp); CGEventPost(kCGHIDEventTap, theEvent);
模拟键盘按键按下
CGEventRef mkey = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)key, true); CGEventPost(kCGHIDEventTap, mkey); CFRelease(mkey);
模拟键盘按键松开
CGEventRef mkey = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)key, false); CGEventPost(kCGHIDEventTap, mkey); CFRelease(mkey);
将Qt::Key转换为CGKeyCode(即Mac使用的键值)
CGKeyCode QtKeyCode2MacKeyCode(Qt::Key k){ switch(k){ case Qt::Key_0: return kVK_ANSI_0; case Qt::Key_1: return kVK_ANSI_1; case Qt::Key_2: return kVK_ANSI_2; case Qt::Key_3: return kVK_ANSI_3; case Qt::Key_4: return kVK_ANSI_4; case Qt::Key_5: return kVK_ANSI_5; case Qt::Key_6: return kVK_ANSI_6; case Qt::Key_7: return kVK_ANSI_7; case Qt::Key_8: return kVK_ANSI_8; case Qt::Key_9: return kVK_ANSI_9; case Qt::Key_Q: return kVK_ANSI_Q; case Qt::Key_W: return kVK_ANSI_W; case Qt::Key_E: return kVK_ANSI_E; case Qt::Key_R: return kVK_ANSI_R; case Qt::Key_T: return kVK_ANSI_T; case Qt::Key_Y: return kVK_ANSI_Y; case Qt::Key_U: return kVK_ANSI_U; case Qt::Key_I: return kVK_ANSI_I; case Qt::Key_O: return kVK_ANSI_O; case Qt::Key_P: return kVK_ANSI_P; case Qt::Key_A: return kVK_ANSI_A; case Qt::Key_S: return kVK_ANSI_S; case Qt::Key_D: return kVK_ANSI_D; case Qt::Key_F: return kVK_ANSI_F; case Qt::Key_G: return kVK_ANSI_G; case Qt::Key_H: return kVK_ANSI_H; case Qt::Key_J: return kVK_ANSI_J; case Qt::Key_K: return kVK_ANSI_K; case Qt::Key_L: return kVK_ANSI_L; case Qt::Key_Z: return kVK_ANSI_Z; case Qt::Key_X: return kVK_ANSI_X; case Qt::Key_C: return kVK_ANSI_C; case Qt::Key_V: return kVK_ANSI_V; case Qt::Key_B: return kVK_ANSI_B; case Qt::Key_N: return kVK_ANSI_N; case Qt::Key_M: return kVK_ANSI_M; case Qt::Key_F1: return kVK_F1; case Qt::Key_F2: return kVK_F2; case Qt::Key_F3: return kVK_F3; case Qt::Key_F4: return kVK_F4; case Qt::Key_F5: return kVK_F5; case Qt::Key_F6: return kVK_F6; case Qt::Key_F7: return kVK_F7; case Qt::Key_F8: return kVK_F8; case Qt::Key_F9: return kVK_F9; case Qt::Key_F10: return kVK_F10; case Qt::Key_F11: return kVK_F11; case Qt::Key_F12: return kVK_F12; case Qt::Key_Left: return kVK_LeftArrow; case Qt::Key_Right: return kVK_RightArrow; case Qt::Key_Down: return kVK_DownArrow; case Qt::Key_Up: return kVK_UpArrow; case Qt::Key_Return: return kVK_Return; case Qt::Key_Tab: return kVK_Tab; case Qt::Key_Space: return kVK_Space; case Qt::Key_Delete: return kVK_Delete; case Qt::Key_Escape: return kVK_Escape; case Qt::Key_Shift: return kVK_Shift; case Qt::Key_Control: return kVK_Control; case Qt::Key_CapsLock: return kVK_CapsLock; default: return kVK_Escape; }}
阅读全文
0 0
- Qt for Mac模拟鼠标以及键盘事件
- 模拟鼠标键盘事件
- 鼠标键盘事件模拟
- 模拟鼠标、键盘事件
- qt鼠标 键盘事件
- Qt鼠标键盘事件
- QT添加托盘以及SendInput模拟鼠标键盘用法
- Qt 鼠标事件,键盘事件
- QT 模拟鼠标事件
- QT 模拟鼠标事件
- QT 模拟鼠标事件
- QT模拟鼠标事件
- C#模拟键盘鼠标事件
- C#模拟键盘鼠标事件
- C#模拟键盘鼠标事件
- QTP模拟鼠标键盘事件
- Android模拟键盘鼠标事件
- Android 模拟键盘鼠标事件
- perf top -p `pidof mysqld` 分析mysql性能消耗
- React-native 报错处理
- 在ubuntu上装CUDA,80%的人肯定会遇到这个坑儿
- Javase—集合框架Map
- python数据分析(数据可视化)
- Qt for Mac模拟鼠标以及键盘事件
- Android studio 打开monitor 出现error提示 的解决办法 特别是使用了JDK-9
- Elasticsearch创建索引
- Python入门教程完整版(懂中文就能学会)视频\02python基础\day05\189-字符串-05-判断数字的三个方法.py
- 接口的认识
- IntelliJ如何设置类头注释和方法注释
- 干货分享!关于APP导航菜单设计你应该了解的一切
- Android 系统稳定性
- spring cloud之服务调用及使用ribbon实现负载均衡(三)