- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在编写一个简单的 Mac 应用程序,旨在在用户单击鼠标按钮时在后台运行并执行某些操作。该应用程序是使用 PyObjC 用 Python 编写的。我正在使用 addGlobalMonitorForEventsMatchingMask
来监视 NSLeftMouseDown
事件:
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSLeftMouseDownMask, handler)
此代码在终端中运行时完美运行。但是,当我将它捆绑为独立应用程序(使用 py2app)然后启动它时,该应用程序一开始不会收到任何事件。 (或者至少,如果是这样,它不会运行我的处理程序方法中的代码。)只有当我在 Dock 中单击应用程序时,它才会开始接收事件,然后,即使在它之后,它也会继续接收事件返回后台。但它在激活一次之前不会收到任何东西。
我的问题是:如何让我的应用在启动后立即开始接收事件,而不必先通过单击 Dock 图标来激活它?这是 NSEvents
的一些已知怪癖,还是我在 PyObjC 中的运行循环可能有问题?
非常感谢任何帮助或指导!
编辑:经过进一步测试,事实上,无论我是否激活它,我的应用程序似乎都会在启动后大约十秒内自发地开始接收通知。这有点烦人,但很好。
但是,如果我在 Info.plist
中使用 LSUIElement = true
或 LSBackgroundOnly = true
运行应用程序(我最终想要要做,因为这个应用程序应该只在后台运行并且永远不会出现在 Dock 中),我从来没有收到通知。所以我还是卡住了。
最佳答案
正如您所说的“只有当我单击 Dock 中的应用程序时,它才会开始接收事件”,这意味着处理程序会在您单击 Dock 中的应用程序后注册。
因此,这取决于您在代码中的哪个位置调用它: NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSLeftMouseDownMask, handler) ,那就是注册处理程序。
您应该在 appdidfinishlaunching 函数中注册处理程序。
关于python - NSEvent 后台全局事件监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17845877/
如何区分事件 -(void)scrollWheel:(NSEvent *)event 是由 Magic Mouse 还是触控板触发的? 我问这个问题的原因是因为我想在使用触控板时为滚动事件分配不同的操
我正在尝试使用 NSEvent 和鼠标单击来触发基本功能。例如,按下鼠标左键时关闭窗口。在这个方法中我还需要什么? 谢谢。 - (void)mouseDown:(NSEvent *)theEvent
在 Mac OS X 10.6 中,NSEvent 有一个 +modifierFlags 类方法来确定当前按下的修饰符标志。在 10.5 中,使用 [[NSApp currentEvent] modi
我正在尝试创建鼠标按下事件,但在“override func mouseDown( theEvent: NSEvent!) { ”行中不断收到错误“使用未声明的类型‘NSEvent’”。在研究和尝试不
感谢您花时间阅读本文。我是 JavaFX 的新手,在我的编译器中有一个奇怪的错误,我想了解一下。 这是错误: 2018-09-13 19:09:36.387 java[8040:660455] unr
下面是我的简单 AppDelegate.swift 类。 // AppDelegate.swift import Cocoa @NSApplicationMain class AppDelegate
我正在编写一个简单的 Mac 应用程序,旨在在用户单击鼠标按钮时在后台运行并执行某些操作。该应用程序是使用 PyObjC 用 Python 编写的。我正在使用 addGlobalMonitorForE
当我按 ^ 或 `,然后按 a 或 e 时,我只得到 a 或 e 而不是 â 或 é。 这是我的代码: - (void) keyDown:(NSEvent*)event { NSString* s
我创建了一个 NSEvent 并且我想发布它。我怎样才能做到这一点? 它是一个 NSSystemDefined 类型,我想将其发布到全局范围内。基本上是一些 IOHIDPostEvent 或 CGEv
在 Cocoa 中,您可以重写某些类中的 keyDown(event:NSEvent) 方法,以便在用户按下某个键时收到通知。在大多数情况下,事件将包含按键代码和按下的字符等。但是,如果您在美式扩展键
好的,我了解如何从 NSEvent 确定是否按下了修饰键: if ([theEvent modifierFlags] & NSAlternateKeyMask) { // The Op
问候语:Instruments 告诉我 viewDidLoad 中的两个 addLocalMonitor 调用存在内存泄漏(每个 3 字节)。我很高兴看到我的错误以及为什么(可能)泄漏。非常感谢任何帮
我使用以下代码处理键盘上字母键的按下。 NSEvent.addGlobalMonitorForEvents(matching: NSEvent.EventTypeMask.keyDown) { eve
我创建了一个 NSTrackingArea 并在 userInfo 参数中传递了一个字典。 let trackingData = ["section": 1, "sectionRow": 12, "d
我在监听事件时遇到问题,我可以监听完美运行的事件,但我无法让它停止监听事件。我研究了一段时间,想出了一个方法,+ (void)removeMonitor:(id)eventMonitor,它说我应该在
我正在尝试以编程方式在 cocoa 应用程序中为我的用户按住选项键。 在我的一生中,我似乎无法捕获 NSEVENT 修改它并重新发布它。我仍然想捕获 MouseDown 事件,因为我使用该位置 - 我
@property(readonly) NSTimeInterval timestamp; 表示自系统启动以来事件发生的时间(以秒为单位)。我想比较两个事件的时间戳,但它们的差异也可能以毫秒为单位。那
您好,我正在创建一个 os x 应用程序,并尝试为其添加远程接口(interface)。为此,我需要能够将鼠标向下和鼠标向上命令发送到我的应用程序的窗口。 我找到了可以成功执行此操作的代码,如下所示:
我想使用 NSPropertyListSerialization 编码 NSEvent,但 NSPropertyListSerialization 只接受 NSData、NSString、NSArra
我的应用程序使用事件点击来捕获键盘事件,我想知道每个事件来自哪个设备(即哪个键盘)。是否存在某种设备识别信息以及点击获取的 CGEvent?我查看了 NSEvent 的方法和各种 CGEventFie
我是一名优秀的程序员,十分优秀!