【问题标题】:How can i "freeze" all interaction with other windows?我如何“冻结”与其他窗口的所有交互?
【发布时间】:2014-05-10 13:55:37
【问题描述】:

这个问题可能看起来有点奇怪。基本上我正在尝试制作一个菜单栏应用程序。当用户按下命令时,我想让您无法与正在运行的其他应用程序交互(写入/选择/单击等)。

我正在使用此代码来检测是否按下了命令和鼠标按钮:

mouseEventMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask ) {
         if (event.modifierFlags & NSCommandKeyMask)
                                                                       { 
    // "Freeze" all other apps.
    }
    }];

当我在桌面上使用它时,它可以找到,但是,在 safari 或 xcode 中使用这个 xcode 会导致巨大的延迟,因为它们与我的应用程序冲突。我还尝试在其后面添加一个不可见的窗口。但是,当我这样做时,mouseEventMonitor 将不起作用,因为它仅适用于应用程序之外的事件。

我希望我解释得足够好。

干杯。

【问题讨论】:

    标签: objective-c macos cocoa


    【解决方案1】:

    我不太明白您的问题,但对于不可见的背景窗口(在您的应用程序内),您可以尝试使用LocalMonitor 而不是GlobalMonitor

    mouseEventMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:(NSLeftMouseDownMask | NSRightMouseDownMask | NSOtherMouseDownMask) handler:^NSEvent *(NSEvent *event) {
    
    
    NSLog(@"theEvent->%@",event);
    
    return event;
    }];
    

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 2012-06-23
      • 1970-01-01
      相关资源
      最近更新 更多