我有多台监视器,并且在应用程序之间移动时,通常可以通过键盘更快地执行此操作,因此我倾向于通过键盘快捷键来进行大部分的窗口管理/导航。但是,有时需要使用鼠标。我的问题是,当我更改活动窗口时,鼠标可以位于当前的任何屏幕上,因此我必须先找到它,然后将其拖动到需要单击的位置。
我想要什么:
A)当我通过cmd-Tab切换活动窗口时,请将鼠标移至活动窗口的中心。
B)有键盘快捷键,我可以按它快速将鼠标指针移到活动窗口
我发现许多分别支持FFM的“黑客”和应用程序,但我想要MFF。有人知道该怎么做吗?
答案 0 :(得分:0)
基本概念很简单,尽管实现中有一些怪癖。以下脚本应能满足您在(A)中的要求,但要注意的是它不能区分如何打开应用程序。只要应用程序处于活动状态(通过cmd-tab,单击停靠图标,双击应用程序图标等),它将运行,并且如果没有打开的窗口或发生其他一些错误情况,它将以静默方式失败。
将以下脚本复制到脚本编辑器中,并将其另存为保持打开状态的应用程序(从“文件格式”下拉菜单中选择“应用程序”,然后单击“在运行处理程序后保持打开状态”复选框)。您需要在安全性首选项中为其授予“可访问性”权限,并且每次编辑脚本应用程序时都必须重新打开这些权限。
use AppleScript version "2.4"
use framework "AppKit"
use scripting additions
property NSWorkspace : class "NSWorkspace"
on run
set workSp to NSWorkspace's sharedWorkspace()
set notifCent to workSp's notificationCenter()
tell notifCent to addObserver:me selector:"activeAppHasChanged:" |name|:"NSWorkspaceDidActivateApplicationNotification" object:(missing value)
end run
on idle
-- we don't use the idle loop, so tell the system let the app sleep. this comes out of idle once an hour
return 3600
end idle
on activeAppHasChanged:notif
set targetApp to (notif's userInfo's valueForKey:"NSWorkspaceApplicationKey")
set targetAppName to (targetApp's localizedName) as text
tell application "System Events"
tell process targetAppName
try
set {xpos, ypos} to position of first window
set {w, h} to size of first window
my mouseMove(xpos + w / 2, ypos + h / 2)
end try
end tell
end tell
end activeAppHasChanged:
on mouseMove(newX, newY)
do shell script "
/usr/bin/python <<END
from Quartz.CoreGraphics import CGEventCreateMouseEvent
from Quartz.CoreGraphics import CGEventPost
from Quartz.CoreGraphics import kCGMouseButtonLeft
from Quartz.CoreGraphics import kCGHIDEventTap
from Quartz.CoreGraphics import kCGEventMouseMoved
import time
def mouseEvent(posx, posy):
theEvent = CGEventCreateMouseEvent(None, kCGEventMouseMoved, (posx,posy), kCGMouseButtonLeft)
CGEventPost(kCGHIDEventTap, theEvent)
mouseEvent(" & newX & "," & newY & ");
END"
end mouseMove
启动脚本并使其在后台运行。每次切换应用程序时,它将光标定位在应用程序的第一个打开的窗口中。如果您更喜欢选项(B)-键盘快捷键路线-也是可行的,但是方法有些不同。询问您是否需要帮助以实施它。