LanYunのBlog

LanYunのBlog

马上订阅 LanYunのBlog RSS 更新: https://lanyundev.com/atom.xml

解决macOS全屏模式下某些情况显示原始鼠标指针的问题

2025年6月12日 17:57

前前言

本人技术又提高了一丢丢,已经会用更优雅更好地方式(通过 System Events 接口)来控制dock栏状态(而不是用defaults这种方式),可惜的是菜单栏依然不支持通过 System Events 接口来控制.目前代码有优化的空间(操作也能更优雅一些,还可以考虑写个GUI),但我懒+没空(先搁置),以后再优化.

前言

在macOS玩全屏(16:10比例,不是无边框)非纯原生游戏过程中遇到一个(其实后面更新说明还遇到一个)很难受的问题,在游戏将鼠标指针移动到屏幕上方菜单栏区域并点击后,鼠标指针会立刻出现并显示为macOS系统的鼠标指针,严重影响游戏体验。例如在通过CrossOver运行的Palworld(幻兽帕鲁),部分原生的League of Legends(英雄联盟)等游戏。本文主要通过一些曲线办法来解决。

曲线办法解释:通过脚本将 自动隐藏和显示菜单栏 状态设置为始终,由于macOS在这种状态下,你向上移动鼠标指针并停留依然会显示菜单栏并影响游戏,故我通过编写程序来阻止鼠标指针移动到屏幕顶端/处理鼠标指针触顶后的一些操作。

本人环境: macOS 15.5(文章发布时的macOS最新正式版,请看更新说明来支持macOS 26),M1 MAX(arm架构)

注:由于技术力有限(源代码写的过于丑陋),就不贴源代码了,仅提供可在Apple silicon(ARM架构)下运行的二进制文件(技术力提高,提高二进制兼容性,适配不同的macOS)。

关于程序实现方式,我是通过CGEventTap来处理鼠标的移动事件,这种实现方式在用户态实现且过程中开销有点大,我无力解决(IOHIDManager等更底层的实现的方式我不会),但要比我最开始用Hammerspoon写的lua脚本性能高多了(后面可以贴贴我这个lua脚本,写的很简洁)

关于菜单栏状态切换.scpt脚本,如果 自动隐藏和显示菜单栏 状态如果不为 永不,那么切换为 永不,否则切换为 始终(这是符合我的使用习惯的,如果需要请自行修改)。

另外,这个脚本和macOS其他版本大概率不兼容,我只在我当前版本测试通过,其他版本请自行修改代码。

注:非中文用户如果需要使用 简易版,则需要修改菜单栏状态切换.scpt文件(修改起来很简单,你只需要将文件中第23到26行中的中文替换为你本机上对应按钮的语言即可),因为我这个脚本是以我中文界面编写的。

为了方便想要自定义某些操作的用户,下面我将提供2种方式来介绍。

简易版

建议懒人(比如我😂)使用此方式(自定义用户也可作为参考).

将下面命令在终端中运行.

1
2
3
4
5
6
7
8
9
user=$(whoami);echo -n "${user}" | pbcopy
eval savepath="/Users/${user}/Documents/MouseWall";mkdir -p $savepath;
download_path='https://lanyun.pages.dev/download_file/MouseWall';
urls=("${download_path}/MouseWall" "${download_path}/MouseClick" "${download_path}/菜单栏状态切换.scpt" "${download_path}/游戏模式切换.sh" "${download_path}/游戏模式切换.shortcut");
for url in "${urls[@]}"; do
wget -P "${savepath}" "${url}" || curl -L -o "${savepath}/$(basename "${url}")" "${url}"
done
sed -i '' "s/user=\$(whoami)/user='${user}'/g" "${savepath}/游戏模式切换.sh";chmod -R 777 "${savepath}";
open "${savepath}/游戏模式切换.shortcut"

点击 添加快捷指令 ,然后选中 游戏模式切换 右键选择编辑,然后选中这段文字 这里填你的用户名 ,然后右键点击粘贴,然后关闭窗口。

你需要在 系统设置 中 隐私与安全性 中 辅助功能 中添加 快捷指令 应用(需要给权限)

之后要运行,点击对应快捷指令右上角的运行即可。

注:如果你需要程序有高优先级(保证程序在游戏过程中能优先处理鼠标指针位置,我是建议这样做的),则需要在 快捷指令 中勾选 以管理员身份运行 ,同时还需要在 辅助功能 中添加 XPCServices/ShortcutsMacHelper.xpc ,如何添加?通过终端运行这个命令 open /System/Library/PrivateFrameworks/WorkflowKit.framework/XPCServices 打开文件夹并选中 XPCServices/ShortcutsMacHelper.xpc 然后拖入 辅助功能 列表中,授权即可(macOS有bug,授权成功后在列表里面看不到),你还要将 MouseWall_Refactored 文件也拖入辅助功能 列表中。

如果下载失败,你可以选择通过代理下载或者将 lanyun.pages.dev 替换为 lanyundev.com 并在浏览器的无痕模式中进行下载。

自定义

懒得写了,简易版讲的很清楚了,会改的人我也不用多说,直接贴可能需要的文件下载链接

菜单栏状态切换.scpt 游戏模式切换.sh 游戏模式切换.shortcut MouseWall MouseClick MouseWall_Refactored MouseWall_Refactored_NoLimit

关于Hammerspoon写的lua文件(init.lua)如下...

剩余内容已隐藏

查看完整文章以阅读更多