mac鼠标键盘的反向控制

来源:互联网 发布:windows八寸平板有哪些 编辑:程序博客网 时间:2024/06/07 01:09

  • 目标
  • 实现方式
  • 步骤
  • 关键代码
    • 键盘的操作
    • 鼠标的操作
      • 出现的问题

目标

实现mac的反向控制。

实现方式

通过Qt调用mac api的方式。。

步骤

1,控制端的鼠标键盘消息全部映射成Qt的键盘鼠标值,也就是消息传输的是Qt的值。(这一步其实不用做什么,直接获取就是了)
2,将Qt的值再转换成当前系统所对应的值。

关键代码

键盘的操作

CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStatePrivate);CGEventRef A = CGEventCreateKeyboardEvent(source, kVK_ANSI_A, true);CGEventSetFlags(A, kCGEventFlagMaskCommand);//这里按下了command键CGEventTapLocation location = kCGHIDEventTap;//发送事件CGEventPost(location, A);CFRelease(A);CFRelease(source); 

参考:
macOS上模拟发送键盘事件
Mac OS objectc关于代码模拟键盘输入

建议:因为输入一个字母是两个动作,按下和抬起。因此建议,在收到按下信号的时候,把抬起动作也一起做了。

鼠标的操作

- (void)buttonClick{    CGPoint pt = CGPointMake(216, 80);    PostMouseEvent(kCGMouseButtonLeft, kCGEventLeftMouseDown, pt);    PostMouseEvent(kCGMouseButtonLeft, kCGEventLeftMouseUp, pt);    sleep(2);    [self writeString:@"Hello" withFlags:0];}void PostMouseEvent(CGMouseButton button, CGEventType type, const CGPoint point){    CGEventRef theEvent = CGEventCreateMouseEvent(NULL, type, point, button);    CGEventSetType(theEvent, type);    CGEventPost(kCGHIDEventTap, theEvent);    CFRelease(theEvent);}

双击
Performing a double click using CGEventCreateMouseEvent()

参考
Mac下的按键精灵实现

出现的问题

鼠标右击事件的时候,主程序卡死。然后按一下鼠标就好了。我怀疑是事件循环导致的问题。这里貌似处理了这种情况。
还有就是我用xcode创建了一个macDemo,鼠标的事件没有执行。我怀疑也是这里的问题。

原创粉丝点击