Macos 如何使用私有coregraphic方法以编程方式缩放屏幕(如何查找函数参数)
正如您可能知道的,Mac OS X内置了非常好的屏幕缩放功能,可以在System Preferences=>Universal Access中启用 现在我正试图通过编程触发屏幕缩放。我可以通过发送键盘快捷键来实现这一点,但它并没有那么流畅。所以我做了一些关于系统是如何做到这一点的研究 似乎有一些私有的核心图形方法可以实现我想要的功能,但我无法找到它们的参数 以下是我发现的功能:Macos 如何使用私有coregraphic方法以编程方式缩放屏幕(如何查找函数参数),macos,cocoa,core-graphics,private,Macos,Cocoa,Core Graphics,Private,正如您可能知道的,Mac OS X内置了非常好的屏幕缩放功能,可以在System Preferences=>Universal Access中启用 现在我正试图通过编程触发屏幕缩放。我可以通过发送键盘快捷键来实现这一点,但它并没有那么流畅。所以我做了一些关于系统是如何做到这一点的研究 似乎有一些私有的核心图形方法可以实现我想要的功能,但我无法找到它们的参数 以下是我发现的功能: CGSZoomPoint CGSUnzoomPoint CGSGetZoomParameters CGSSetZoo
- CGSZoomPoint
- CGSUnzoomPoint
- CGSGetZoomParameters
- CGSSetZoomParameters
- CGSIS放大
CG_EXTERN CGError CGSIsZoomed(CGSConnectionID cid, bool *outIsZoomed);
)
我还发现了一个应用程序,它似乎能够缩放屏幕,这似乎是相关的拆卸,但我不太了解组装,因此我无法阅读它-(
如果有人知道如何使用这些私人功能,你可以在我的这一周内使用:-)
最好的,
Thomas这个问题已经很久没有答案了,但碰巧我发现如何在我自己的工作中使用
CGSGetZoomParameters
和CGSSetZoomParameters
,它们都可以用来控制和检索屏幕缩放状态的信息。函数定义如下:
CG_EXTERN CGError CGSGetZoomParameters(CGSConnectionID cid, CGPoint *origin, double * zoomFactor, int8_t *smoothed);
CG_EXTERN CGError CGSSetZoomParameters(CGSConnectionID cid, CGPoint *origin, double zoomFactor, int8_t smoothed);
其中origin
确定使用以下方法缩放屏幕的哪个部分:
要尽可能向左缩放区域,请将origin.x
设置为:(desktopWidth/2)/zoomFactor
要尽可能向右缩放区域,请将origin.x
设置为:desktopWidth-((desktopWidth/2)/zoomFactor)
要尽可能放大区域,请将origin.y
设置为:(desktopHeight/2)/zoomFactor
要尽可能向右缩放区域,请将origin.y
设置为:desktopHeight-((desktopHeight/2)/zoomFactor)
对于desktopWidth
和desktopHeight
是当前桌面边框的总宽度/高度,包括当前排列中的所有显示。因此,如果两个1080p显示器完全水平排列,则桌面的总宽度和高度为3840x1080
要缩放中间区域,请使用介于两个极值之间的origin
值。数学计算的结果是,它们之间的整数点数与缩放屏幕在任何给定的zoomFactor
中可以具有的位置数完全对应
这些功能级别较低,将干扰标准的macOS辅助功能缩放功能。例如,如果您的屏幕未缩放,请使用CGSSetZoomParameters
将其放大,然后使用一种辅助功能(如按住Control键和滚动鼠标滚轮)来更改缩放,它们将像屏幕未缩放一样工作。此外,当屏幕缩放时,无论辅助功能缩放功能如何配置,都无法使用鼠标平移屏幕,因此请小心!您可能会导致屏幕放大,用户无法再次缩小
我不确定如何使用
CGSZoomPoint
或CGSUnzoomPoint
——我无法让它们产生任何效果。但是如上所述,屏幕缩放的低级别控制可以通过其他两个功能来完成。我也有一个想法,需要通过编程来缩放屏幕。应用程序的名称是什么?你能告诉我你是否找到了一些解决方案吗?因为我已经搜索了好几天了
CG_EXTERN CGError CGSGetZoomParameters(CGSConnectionID cid, CGPoint *origin, double * zoomFactor, int8_t *smoothed);
CG_EXTERN CGError CGSSetZoomParameters(CGSConnectionID cid, CGPoint *origin, double zoomFactor, int8_t smoothed);