如何让我的窗口从另一个在 MacOS 上拖动的窗口中窃取焦点?

Posted

技术标签:

【中文标题】如何让我的窗口从另一个在 MacOS 上拖动的窗口中窃取焦点?【英文标题】:How do I make my window steal focus from another window being dragged on MacOS? 【发布时间】:2022-01-12 22:59:42 【问题描述】:

我目前正在开发一个辅助功能应用程序,该应用程序的功能是在按下两个鼠标按钮拖动窗口时触发的。我的应用程序需要打开一个新的无边框窗口并从正在拖动的窗口中窃取焦点(并防止窗口被进一步拖动)。我的目标是最终在焦点窃取窗口的帮助下调整拖动窗口的大小。我该怎么做?

我在 Swift 上使用 Cocoa 框架。这是我尝试过的:

NSApp.activate(ignoringOtherApps: true)
myAccessibilityWindow.makeKeyAndOrderFront(nil)

辅助功能窗口按预期排列在前面,但在我停止拖动触发窗口之前,它不会窃取焦点(辅助功能窗口内不会触发鼠标事件)。这是不希望的,因为我要尽快窃取鼠标焦点并防止窗口被进一步拖动。

【问题讨论】:

【参考方案1】:

除了使辅助功能窗口成为关键窗口之外,您还必须模拟鼠标向上事件才能停止拖动。

let mouseLocation = NSEvent.mouseLocation
let source = CGEventSource.init(stateID: .hidSystemState)
let mouseUp = CGEvent(mouseEventSource: source, mouseType: .leftMouseUp, mouseCursorPosition: mouseLocation, mouseButton: .left)
mouseUp?.post(tap: .cghidEventTap)

非常感谢Tarun Lalwani。

【讨论】:

以上是关于如何让我的窗口从另一个在 MacOS 上拖动的窗口中窃取焦点?的主要内容,如果未能解决你的问题,请参考以下文章

苹果Mac窗口布局整理工具:Tiles

c#如何从另一个窗口中更改主窗口控件的属性

Tkinter:鼠标拖动一个没有边框的窗口,例如。覆盖直接(1)

VC:如何实现窗口和窗口内容在鼠标拖动下改变大小

如何从另一个对象访问我的 Application Delegate 的窗口访问器方法?

如何使用 SwiftUI 在 macOS 上可靠地检索窗口的背景颜色?