我的应用程序上有一个按钮,单击后会启动特定路径的查找器窗口。
我正在用这个
NSString *picturesPath = [self getAppPicturesPath];
[[NSWorkspace sharedWorkspace] selectFile:nil inFileViewerRootedAtPath:picturesPath];
问题是,如果我从显示器 1 运行应用程序,窗口将在显示器 2 上的随机位置启动。
如何使该窗口在我的应用程序运行的同一显示器上启动,并且最好在其顶部居中?
最佳答案
如果您的应用程序未沙盒化,您可以通过使用 AppleScript 设置窗口的位置来实现。您需要检查所需屏幕的框架,这可以使用 NSScreen 来完成。例如,如果我在当前设置上运行此代码(Swift,用于更好的 NSRect
日志记录,但 Objective-C 中的等效项已经足够明显):
import Cocoa
for eachScreen in NSScreen.screens {
print(eachScreen.frame)
}
我得到:
(0.0, 0.0, 1920.0, 1200.0)
(-1440.0, -511.0, 1440.0, 900.0)
如您所见,我的第二个屏幕的框架具有负坐标,因此如果我将窗口移动到那边的某个位置,如下所示:
tell application "Finder"
set theFolder to folder POSIX file "/usr/bin"
open theFolder
set the position of the window of theFolder to {-885, 938}
end tell
它最终出现在第二个屏幕上。
如果您想知道如何实际执行脚本,您有几个选择。你可以使用NSAppleScript
糟糕的API,你可以使用Scripting Bridge
糟糕的API,或者你可以使用NSTask
自己DIY糟糕的API code>/Process
将脚本发送到 osascript -e
。
关于macos - 在以我的应用程序为中心的同一显示屏上显示取景器窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801485/