cocoa – CGEventTap阻止应用程序输入

cocoa – CGEventTap阻止应用程序输入,第1张

概述我正在尝试使用CGCreateEventTap来监控全局鼠标点击,但是当我这样做时,它似乎阻止了与我自己的应用程序的交互.其他正在运行的应用程序中的鼠标点击工作正常,但我自己的应用程序(即DemoAppDelegate应用程序)没有完全响应.我可以拖动应用程序的主窗口,但红色/黄色/绿色窗口按钮显示为灰色. DemoApp的菜单也是不可点击的. 这对我来说真的很奇怪,我一直无法弄明白.使用事件点击 我正在尝试使用CGCreateEventTap来监控全局鼠标点击,但是当我这样做时,它似乎阻止了与我自己的应用程序的交互.其他正在运行的应用程序中的鼠标点击工作正常,但我自己的应用程序(即DemoAppDelegate应用程序)没有完全响应.我可以拖动应用程序的主窗口,但红色/黄色/绿色窗口按钮显示为灰色. DemoApp的菜单也是不可点击的.

这对我来说真的很奇怪,我一直无法弄明白.使用事件点击的例子很少,所以任何建议都非常感谢.

#import "DemoAppDelegate.h"CGEventRef myCGEventCallback(CGEventTapProxy proxy,CGEventType type,CGEventRef event,voID *refcon) {    CGPoint location = CGEventGetLocation(event);    NSLog(@"location:  (%f,%f) - %@\n",location.x,location.y,(Nsstring*)refcon);    return event;}@implementation DemoAppDelegate@synthesize window;- (voID)applicationDIDFinishLaunching:(NSNotification *)aNotification {    CFMachPortRef eventTap;    CGEventMask        eventMask;    CFRunLoopSourceRef runLoopSource;    eventMask = 1 << kCGEventleftMouseDown;    eventTap = CGEventTapCreate(kCGSessionEventTap,kCGheadInsertEventTap,1,eventMask,myCGEventCallback,@"mydata");    runLoopSource = CFMachPortCreateRunLoopSource(kcfAllocatorDefault,eventTap,0);    CFRunLoopAddSource(CFRunLoopGetCurrent(),runLoopSource,kcfRunLoopCommonModes);    CGEventTapEnable(eventTap,true);    CFRunLoopRun();}@end
解决方法 当您创建Cocoa应用程序时,– [NSApplication run]负责运行事件循环 – 它运行运行循环,并调度事件.这意味着你应该删除它

CFRunLoopRun();

调用-applicationDIDFinishLaunching:方法实现的底部,因为它阻止-applicationDIDFinishLaunching:返回并且还阻止NSApplication调度事件.

总结

以上是内存溢出为你收集整理的cocoa – CGEventTap阻止应用程序输入全部内容,希望文章能够帮你解决cocoa – CGEventTap阻止应用程序输入所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1002890.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存