# MacOS下实现自动切换QuickQ的代理线路 **Published by:** [松松的程序世界](https://paragraph.com/@websong/) **Published on:** 2023-01-05 **URL:** https://paragraph.com/@websong/macos-quickq ## Content QuickQ等vpn工具都有提供了很多的代理线路,日常在批量参与一些活动的时候,就希望可以自动切换线路来获取不同的ip,把这些ip资源充分利用起来。 因为是mac系统,所以这里选择了Hammerspoon,一个使用lua脚本自动化操作mac系统功能的工具: https://www.hammerspoon.org/ Hammerspoon实现了很多系统功能的api,比如可以快速控制窗口的位置,可以模拟鼠标键盘的点击,可以和菜单交互,支持applescript等等,可以一览他们的API手册: https://www.hammerspoon.org/docs/index.html Hammerspoon的使用很简单,安装后,在用户目录下的.hammerspoon文件夹里创建一个init.lua文件,就可以编写脚本了: 我们通过一个组合键,发找到QuickQ的窗口,然后将它移动到屏幕的边缘便于进行鼠标点击的控制, 完整实现的代码如下:hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Q", function() local windows = hs.window.allWindows() for _, win in pairs(windows) do -- 在Lua中遍历表的方法 local app = win:application() local bundleID = app:bundleID() -- hs.alert.show(bundleID) -- hs.alert.show(app:name()) -- if bundleID == "com.google.Chrome" then if app:name() == "QuickQ" then win:focus() local f = win:frame() if f.x ~= 0 and f.y ~= 0 then local screen = win:screen() local max = screen:frame() f.x = 0 --max.x f.y = 0 --max.y f.w = max.w / 2 f.h = max.h win:setFrame(f) end -- 屏幕 1 local point = { x = 205.0, y = 598.0 } local point2 = { x = 168.0, y = 292.0 } -- 屏幕 2 -- local point = { x = 1822.0, y = 128.0 } -- local point2 = { x = 1779.0, y = -179.0 } -- hs.alert.show(hs.mouse.getAbsolutePosition().x) -- hs.alert.show(hs.mouse.getAbsolutePosition().y) hs.timer.doAfter(1, function() hs.eventtap.leftClick(point) end) hs.timer.doAfter(2, function() hs.eventtap.leftClick(point2) end) end end end) 编写中发现win:setFrame()之后可能会丢失窗口的focus,其实是mac下窗口移动需要一个动画时间的,而如果后面的click速度太快,就激活了其他窗口,解决办法就是调用hs.timer.doAfter方法来给后面的click做一个延时触发。 坐标的位置如果有差异可以自行通过hs.alert.show(hs.mouse.getAbsolutePosition().x)来捕获下。 源码也可以到我的github上查看: https://gist.github.com/logix/dbe4f0cdcba2c1e5a1bb6ab2fed75ff5 这样在Hammerspoon开启的情况下,通过热键⌘+⌥+ctrl+Q,就可以实现线路的切换了,接下来把热键的触发集成到批量操作的脚本里,就可以在批量参加的活动的时候实现更换IP了。 2023年1月5号 ## Publication Information - [松松的程序世界](https://paragraph.com/@websong/): Publication homepage - [All Posts](https://paragraph.com/@websong/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@websong): Subscribe to updates