macos - 在以我的应用程序为中心的同一显示屏上显示取景器窗口

标签 macos cocoa finder nsworkspace

我的应用程序上有一个按钮,单击后会启动特定路径的查找器窗口。

我正在用这个

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/

相关文章:

macos - 如何将数据从Docker容器获取到主机的共享文件夹中?

php - 在 mac 雪豹上启用 php

macos - 如何在 Github for Mac GUI 中选择多个文件

objective-c - 单击 NSTextField 下方

objective-c - NSSegmentedCell 子类的鼠标事件?

css - 是否可以在 HTML + CSS 中模拟 Mac Osx Finder 搜索突出显示?

objective-c - 从服务启动时出现 OSX 代码签名无效异常

macos - 删除文件夹中文件名中的空格

swift - Mac 操作系统的推送通知

cocoa - Mac OS X showWindow 问题 : NSWindow appears only once