V2EX 09月30日 12:39
Mac 微信自动管理,解决手机通知干扰
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文提供了一个解决方案,旨在解决在使用 Mac 微信时,手机端通知频繁弹出的干扰问题。通过 Hammerspoon 工具,脚本可以每隔一段时间检查 Mac 的用户活动状态,若检测到长时间无操作(例如 120 秒),则自动退出 Mac 端的微信应用,从而使手机端能够正常接收消息通知。反之,当检测到有键盘或鼠标活动时,脚本会立即重新启动 Mac 微信。此外,脚本还集成了电源事件监听,在 Mac 休眠或屏幕关闭时退出微信,在唤醒或屏幕亮起后延迟启动,确保了通知的无缝衔接。

💡 **解决 Mac 微信通知干扰痛点**:当用户在 Mac 上使用微信时,手机端会持续收到通知,影响使用体验。若手动关闭 Mac 登录后的手机通知,又可能错过重要信息。本文提出的解决方案旨在自动化此过程,避免手动干预的繁琐。核心在于利用工具在 Mac 闲置时自动退出微信,使手机通知恢复正常。

🚀 **利用 Hammerspoon 实现自动化管理**:文章详细介绍了如何使用 Hammerspoon 工具,通过编写 Lua 脚本来实现 Mac 微信的智能管理。脚本的核心逻辑包括:定时检查 Mac 的键盘和鼠标活动,若检测到长时间无操作(120 秒),则自动退出微信;一旦检测到有操作,立即重新启动微信。这种机制确保了在 Mac 活跃使用时微信可用,在 Mac 闲置时则解除手机通知的限制。

🔌 **集成电源事件与优雅退出机制**:为进一步提升用户体验,脚本还考虑了 Mac 的电源状态。它能够监听系统休眠、唤醒以及屏幕休眠、亮起等事件。在系统休眠或屏幕关闭时,脚本会优雅地退出微信;而在系统唤醒或屏幕亮起后,会有一小段延迟(10 秒或 5 秒)再启动微信,避免了立即启动可能造成的卡顿或不便,实现了更平滑的切换。

⚠️ **对比现有方案的不足**:文章在最后也指出了当前解决方案的一些局限性,例如 iPhone 通知栏的“1 小时提醒”或“今天不提醒”功能略显粗暴,且微信本身不像企业微信那样提供细粒度的无活动通知恢复设置。作者对此表示遗憾,尤其是在 AI 技术飞速发展的当下,基础通讯工具的体验优化仍有提升空间。

1 、痛点:在 mac 上聊天的时候 iPhone 手机就一直咚咚的响好烦,如果点击顶部把 ”mac 已登录手机通知关闭“ 的话,又会忘了开,导致女神的消息无法及时回复,被 diss 不是一个合格的舔狗,emm...

2 、观察结论:如果在 mac 上退出微信的话,手机上的 ”mac 已登录手机通知关闭“ 会自动消掉,手机就能收到通知,从而达到无缝衔接的目的。

3 、解决思路:使用 hammerspoon 实现如下功能:a.每 30 秒检查一次键盘和鼠标动作,如果 120 秒没有动作就退出 mac 微信(注意不能用 killall ,否则 iPhone 那边不知道 mac 上已经退出了)b.当检测到有鼠标和键盘动作后,立即调起微信登录

4 、具体方法:a.下载、安装、打开 hammerspoon ( https://www.hammerspoon.org/)b.打开配置文件写入脚本:

`local idleLimit = 120 -- 120 秒无操作算不活跃local checkInterval = 30 -- 每 30 秒检查一次local wechatBundleID = "com.tencent.xinWeChat"

local timer = nillocal enabled = truelocal lastRunning = nil -- 记录上一次运行状态,避免重复日志

-- 判断微信是否运行local function isWeChatRunning()return hs.application.get(wechatBundleID) ~= nilend

-- 优雅退出微信local function quitWeChat(reason)local app = hs.application.get(wechatBundleID)if app thenapp:kill()hs.alert.show("💤 自动退出微信")print("WeChat quit (" .. (reason or "idle") .. ") at " .. os.date())lastRunning = falseendend

-- 启动微信local function launchWeChat(reason)if not enabled then return endif not isWeChatRunning() thenhs.application.launchOrFocusByBundleID(wechatBundleID)hs.alert.show("🚀 启动微信")print("WeChat launched (" .. (reason or "active") .. ") at " .. os.date())lastRunning = trueendend

-- 检查是否该退出local function checkIdle()if not enabled then return endlocal idleTime = hs.host.idleTime()local running = isWeChatRunning()

if running ~= lastRunning then    print("WeChat running=" .. tostring(running) .. " at " .. os.date())    lastRunning = runningendif idleTime > idleLimit and running then    quitWeChat("idle")end

end

-- 电源事件监听:休眠时退出微信,唤醒后延迟启动local sleepWatcher = hs.caffeinate.watcher.new(function(eventType)if eventType == hs.caffeinate.watcher.systemWillSleep thenquitWeChat("sleep")elseif eventType == hs.caffeinate.watcher.systemDidWake thenhs.timer.doAfter(10, function()launchWeChat("wake")end)elseif eventType == hs.caffeinate.watcher.screensDidSleep thenquitWeChat("screens sleep")elseif eventType == hs.caffeinate.watcher.screensDidWake thenhs.timer.doAfter(5, function()launchWeChat("screens wake")end)endend)sleepWatcher:start()

-- 定时器:负责检测是否要退出if timer thentimer:stop()endtimer = hs.timer.doEvery(checkInterval, checkIdle)

-- 事件监听:键盘/鼠标动作 → 立即启动微信local eventtap = hs.eventtap.new({hs.eventtap.event.types.keyDown,hs.eventtap.event.types.mouseMoved,hs.eventtap.event.types.leftMouseDown,hs.eventtap.event.types.rightMouseDown}, function(_)launchWeChat("input")return falseend)eventtap:start()`后记:1 、在 iPhone 通知栏可设置 1 小时不提醒,今天不提醒,但是这样也是简单粗暴

2 、微信不像企业微信那样可以设置 5min 10min 无活动就恢复通知

在 AI 大爆发的时代,他们把东西做成这样我表示很痛心

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Mac 微信 通知 Hammerspoon 自动化 效率 Mac WeChat Notifications Hammerspoon Automation Productivity
相关文章