coderJie
V2EX  ›  macOS

修复使用 UU 远程控制 Macos27 鼠标点击不会切换窗口焦点问题的一个临时方案

  •  
  •   coderJie · 1 day ago · 993 views

    我最近把 macOS 升级了,结果发现 UU 远程控制突然有点不对劲。

    鼠标明明已经点到了另一个应用里,点击也确实生效了,可键盘输入还留在原来的应用。比如我人在 A 应用里,通过远程控制点击 B 应用的编辑区域,B 应用里的按钮能点,内容也能操作,但一敲键盘,文字还是跑到 A 应用里。

    macOS 新版本似乎收紧了对模拟鼠标事件的处理,等了好久 UU 远程都没更新解决这个问题,最终是求助 AI 做了一个临时方案,以下没有任何推广成分,这是 AI 给出的方案。


    我最后用 Hammerspoon 补了一层逻辑:监听鼠标左键点击,看看鼠标下面的窗口属于哪个应用。如果发现它不是当前前台应用,就主动调用 activate(),帮 macOS 把焦点切过去。

    Hammerspoon 是一个 macOS 自动化工具,可以用 Lua 控制窗口、应用、鼠标、键盘和各种系统事件。用 Homebrew 安装:

    brew install --cask hammerspoon
    

    装好后去系统设置 →隐私与安全性 → 辅助功能,把 Hammerspoon 加进去并启用,否则脚本没有权限监听鼠标事件。 接着创建 ~/.hammerspoon/init.lua ,把下面这段代码放进去:

    local tap = nil
    
    local function createTap()
        if tap then
            pcall(function() tap:stop() end)
            tap = nil
        end
    
        tap = hs.eventtap.new({hs.eventtap.event.types.leftMouseDown}, function(event)
            pcall(function()
                local pos = hs.mouse.absolutePosition()
                local front = hs.application.frontmostApplication()
                for _, win in ipairs(hs.window.orderedWindows()) do
                    local f = win:frame()
                    if pos.x >= f.x and pos.x <= f.x + f.w and
                       pos.y >= f.y and pos.y <= f.y + f.h then
                        local app = win:application()
                        if app and front and app:pid() ~= front:pid() then
                            app:activate(true)
                        end
                        break
                    end
                end
            end)
            return false
        end)
        tap:start()
    end
    
    createTap()
    
    -- 每 2 秒检查,僵死就整个重建
    hs.timer.doEvery(2, function()
        if not tap or not tap:isEnabled() then
            createTap()
        end
    end)
    
    -- 屏幕/空间切换时主动重建
    hs.screen.watcher.new(function()
        hs.timer.doAfter(0.3, createTap)
    end):start()
    
    hs.spaces.watcher.new(function()
        hs.timer.doAfter(0.3, createTap)
    end):start()
    
    hs.alert.show("焦点修复已启动")
    

    然后点击菜单栏里的 Hammerspoon 图标,选择 Reload Config 。看到"焦点修复已启动"的提示,就说明脚本已经开始工作了。 脚本做的事情不复杂:每次鼠标左键按下,先获取当前位置,找出这个位置下面的窗口,如果它属于另一个应用,就调用 app:activate(true)。最后返回 false ,原本的鼠标点击不会被拦截,还是会继续传给目标应用。

    5 replies    2026-07-18 15:12:30 +08:00
    CSGO
        1
    CSGO  
       1 day ago
    op ,我也在用 UU ,控制 Windows 都很好用。控制 macos ,确实交互很奇怪,似乎像是控制 Windows 有点“原生”的感觉,控制 macos 就像是中间套了一层什么东西,像“映射”一样,很多软件都有一点问题,比如“Mos”控制鼠标滚动反向的,也会给滚动增加平滑什么,在 UU 控制 macos 的时候,就反向会失效,平滑变得跑非常快。macos 上安 caps 不是切换输入法,Windows 控制的时候,似乎又无法切换,等等这些小细节,非常影响体验。
    coderJie
        2
    coderJie  
    OP
       1 day ago
    @CSGO 我用着还好吧,没更新 macos27 之前都挺好用的,鼠标滚轮这个建议关闭平滑,其他的我觉得没啥大问题啊,都挺好的
    Lentin
        3
    Lentin  
       1 day ago
    @CSGO 关于鼠标滚动方向 可以试试我弄的这个快捷指令可以快速切换,放到控制中心点一下就可以切换了
    https://www.icloud.com/shortcuts/912d430b4c5e439e81499b56994cb672
    yiranw09
        4
    yiranw09  
       1 day ago
    uu 控制 mac 就是始终有点问题,如果不打游戏,rustdesk 在操作逻辑上我觉得比 uu 强太多,尤其是触控操作。
    momo07
        5
    momo07  
       16h 19m ago
    是有这个问题,uu 官方居然到现在都不修复。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1038 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 23:31 · PVG 07:31 · LAX 16:31 · JFK 19:31
    ♥ Do have faith in what you're doing.