以编程方式查找 Dock 的位置?

8

在代码中是否有一种方法可以找出Mac上的Dock栏位于用户显示器的底部、左侧或右侧?


1
你需要它做什么? - Daniel
我正在开发一个应用程序,它将会自动停靠在屏幕的底部或侧边,但前提是当前的 Mac Dock 不存在。 - Michael Wildermuth
3个回答

8

NSScreenvisibleFrame方法,返回一个矩形,不包括当前被dock和菜单栏占据的区域。您可以将此矩形与全屏矩形(- (NSRect) [NSScreen* frame])进行比较,并确定dock的位置。


很酷,这正是我最初想的。我希望有一种我不知道的方法可以为我返回它。再次感谢。 - Michael Wildermuth

6

这可能更简单...

defaults read com.apple.dock "orientation"

底部

你还可以找到... autohide(即1),large size(即“65.48148”)和magnification(即1)等。


我该如何从Cocoa应用程序中调用“defaults read com.apple.dock orientation”? - Michael Wildermuth
3
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *dockParameterYouWant = [[defaults persistentDomainForName:@"com.apple.dock"] valueForKey:@"thatParameterYouWant"]; 翻译为:NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *dockParameterYouWant = [[defaults persistentDomainForName:@"com.apple.dock"] valueForKey:@"thatParameterYouWant"];意为: 使用NSUserDefaults类创建一个名为defaults的实例,然后从其持久域中获取一个键为"thatParameterYouWant"的参数字符串,该参数属于"com.apple.dock"应用程序的域。 - Alex Gray
抱歉,我不是故意点击它的。我目前仍在使用另一个答案。 - Michael Wildermuth
这对沙盒应用程序也适用吗?还有获取 Dock 大小的任何想法吗?或者当用户悬停在其上(或其中一个图标)时发送通知? - cocoa coder
我不知道在沙盒中是否可以访问默认值...... 我无法在任何地方找到明确的答案。 如果您能够找到,请告诉我。 - Alex Gray
显示剩余2条评论

2

私有发现的API被首选项面板使用

typedef enum {
  kCoreDockOrientationTop = 1,
  kCoreDockOrientationBottom = 2,
  kCoreDockOrientationLeft = 3,
  kCoreDockOrientationRight = 4
} CoreDockOrientation;

extern void CoreDockGetOrientationAndPinning(CoreDockOrientation *outOrientation, CoreDockPinning *outPinning);
// If you only want to set one, use 0 for the other.
extern void CoreDockSetOrientationAndPinning(CoreDockOrientation orientation, CoreDockPinning pinning);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接