在以我的应用程序为中心的同一显示器上显示取景器 window
Displaying a finder window on the same display centered on my app
我的应用程序上有一个按钮,单击后会启动特定路径的查找器 window。
我正在使用这个
NSString *picturesPath = [self getAppPicturesPath];
[[NSWorkspace sharedWorkspace] selectFile:nil inFileViewerRootedAtPath:picturesPath];
问题是,如果我是 运行 应用程序,比方说,显示 1,window 将在显示 2 的随机位置启动。
如何让 window 在与我的应用 运行 相同的显示器上启动,最好在它上面居中?
如果您的应用未被沙盒化,您可以通过使用 AppleScript 设置 window 的位置来实现。你需要检查你想要的屏幕的框架,你可以使用 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)
如您所见,我的第二个屏幕的框架有负坐标,所以如果我将 window 移动到那边的某处,如下所示:
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,也可以自己DIYAPI,用NSTask
/Process
将脚本发送到 osascript -e
.
我的应用程序上有一个按钮,单击后会启动特定路径的查找器 window。
我正在使用这个
NSString *picturesPath = [self getAppPicturesPath];
[[NSWorkspace sharedWorkspace] selectFile:nil inFileViewerRootedAtPath:picturesPath];
问题是,如果我是 运行 应用程序,比方说,显示 1,window 将在显示 2 的随机位置启动。
如何让 window 在与我的应用 运行 相同的显示器上启动,最好在它上面居中?
如果您的应用未被沙盒化,您可以通过使用 AppleScript 设置 window 的位置来实现。你需要检查你想要的屏幕的框架,你可以使用 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)
如您所见,我的第二个屏幕的框架有负坐标,所以如果我将 window 移动到那边的某处,如下所示:
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,也可以自己DIYAPI,用NSTask
/Process
将脚本发送到 osascript -e
.