admin管理员组文章数量:1618204
代码如下:
此代码需要安装brightness
brew installl brightness
#!/bin/bash
#这个脚本将监控IntelliJ(IDEA)窗口,用于macOS系统
while [ true ]
do
#检查当前是否有IDEA窗口正在显示
IDEA_WINDOW=`osascript -e 'tell application "System Events" to count windows of process "IntelliJ IDEA"'`
if [ $IDEA_WINDOW -gt 0 ]
then
#如果有IntelliJ(IDEA)窗口在显示,屏幕亮度增加一度
/usr/local/bin/brightness 0.65
else
# 否则降低一度
/usr/local/bin/brightness 0.6
fi
done
起因
因为我的idea是非常暗的 GitHub黑 主题,所以我需要增加亮度才能看清。
如果我增加亮度,在其他白背景的窗口上就很伤眼。
2023-1-30补充
我觉得使用shell调AppleScript不太好,所以用AppleScript重写了一遍
tell application "System Events"
set tempIdea to false
repeat
set idea to (exists window of process "IntelliJ IDEA")
if idea = tempIdea then
else
if idea = false then
key code 107
else
key code 113
end if
copy idea to tempIdea
end if
delay 0.01
end repeat
end tell
它无需brightness,因为它使用模拟用户按住键盘上的亮度增加和减小键,通过曲线救国的方式实现亮度调节。
因笔记本键位不同,参考资料:https://eastmanreference/complete-list-of-applescript-key-codes
2023-4-27补充
我的电脑长时间不关机运行,这个AppleScript脚本也一直运行,发现时间长了会导致系统卡顿,主要表现为这个AppleScript脚本无法退出,有个进程appleeventsd占用了高达4GB的内存,当我结束该进程之后,有所缓解,但是再次启动AppleScript脚本还是感觉对系统流畅度有影响;因为它性能占用实在是太高了,于是重构实现!
代码如下:
package main
import (
"bytes"
"fmt"
hook "github/robotn/gohook"
"log"
"os/exec"
"strings"
"sync"
"time"
)
func main() {
// 初始化变量,将其用作状态变量来跟踪 IntelliJ IDEA 的打开和关闭状态
var ideaOpen bool = false
// 启动事件监听器
evChan := hook.Start()
defer hook.End()
//1秒钟最多40次
limiter := NewLimiter(time.Second, 40)
for ev := range evChan {
// 判断键盘或鼠标事件
if ev.Kind == hook.KeyUp || ev.Kind == hook.KeyDown || ev.Kind == hook.MouseUp || ev.Kind == hook.MouseDown {
// 判断执行频率
if !limiter.Allow() {
panic("程序出错?超出限制!")
}
// 延时500毫秒
time.Sleep(500 * time.Millisecond)
ideaOpen = New(ev, ideaOpen)
}
}
}
func New(ev hook.Event, ideaOpen bool) bool {
// 设置 AppleScript 命令并将 ideaOpen 变量作为参数传递
cmd := exec.Command("osascript", "-e", fmt.Sprintf(`tell application "System Events"
set tempIdea to %t
set idea to (exists window of process "IntelliJ IDEA")
if idea ≠ tempIdea then
if idea = false then
key code 107
else
key code 113
end if
set tempIdea to idea
end if
return tempIdea
end tell`, ideaOpen))
// 执行 AppleScript 命令并读取标准输出
var stdout bytes.Buffer
cmd.Stdout = &stdout
err := cmd.Run()
if err != nil {
log.Fatalf("cmd.Run() failed with %s\n", err)
}
// 解析标准输出并将其转换为新的 ideaOpen 变量的值
outStr := stdout.String()
var newIdeaOpen bool
if strings.Contains(outStr, "true") {
newIdeaOpen = true
} else {
newIdeaOpen = false
}
// 如果 ideaOpen 变量的值已更改,则打印日志
if newIdeaOpen != ideaOpen {
if newIdeaOpen {
log.Println("IntelliJ IDEA is now open")
} else {
log.Println("IntelliJ IDEA is now closed")
}
}
return newIdeaOpen
}
type Limiter struct {
mu sync.Mutex
lastRequest time.Time
interval time.Duration
count int
limit int
}
func NewLimiter(interval time.Duration, limit int) *Limiter {
return &Limiter{interval: interval, limit: limit}
}
func (l *Limiter) Allow() bool {
l.mu.Lock()
defer l.mu.Unlock()
if time.Since(l.lastRequest) >= l.interval {
l.lastRequest = time.Now()
l.count = 1
return true
}
l.count++
if l.count <= l.limit {
return true
}
return false
}
另外,对于不想编译代码的童鞋,提供了二进制文件:
(⚠️注意:此二进制文件使用了upx压缩,压缩时未设置复杂压缩参数,故而兼容性低,可能只适用于macOS12.0.1或者macOS12,可以证实的是在macOS13.3 (22E252)无法使用,如遇到此情况,请自行编译。)
(2023-05-29更新,我发现添加一定的延时有好处,特别是通过快捷键切换桌面的时候,貌似快捷键和亮度调整按键同时按下会导致亮度调整按键不起作用(调整亮度是通过模拟按下按键实现的)。
另外,我发现即使在13.3.1macOS系统进行upx压缩,压缩后的可执行文件在13.3.1macOS系统上仍然不可执行,所以我决定不使用upx压缩了。
使用upx压缩的本意是想把可执行文件base64后放到文章里,可即使是经过压缩,它还是太大了。
所有改变,二进制文件都随着更新了。)
https://download.csdn/download/Deng_Xian_Sheng/87737488
简单介绍一下,这次使用go和AppleScript联合开发:
- go负责监听任意键盘按下或者鼠标按键按下
- AppleScript负责判断当前窗口是不是idea,如果是则执行相关亮度调整工作
从程序的健壮性上来讲,这次AppleScript是健壮的(上次的AppleScript中有循环语句,测试的时候发生死循环我的电脑被卡死),但是go中有一个for循环,我测试的时候再次遇到死循环导致电脑卡死,当时的处理方法是我限制了循环次数为300次,但是这在实际使用中是不可行的,于是我写了一个完美的策略,当函数的调用频率大于1秒10次的时候,中止程序。
我对go的了解大于AppleScript,所以我对它是有信心的,虽然它很安全,但是为了防止意外,我感觉这种频率限制是有必要的。
这次的性能比上次好得没边,上次是死循环,每次循环都等待一定的时间(且这个时间必须要短),然后检查窗口是不是idea……;这次不一样了,你切换全屏窗口或应用程序肯定是通过键盘或者鼠标按键,我这次监听了它们,当它们产生事件的时候,才检查当前窗口是不是idea……,这极大的节省了性能!
当然,如果你使用触摸板切换应用程序,它可能不能像预期的那样工作,你可以修改我的代码,然后发一篇博客,记得在评论区告诉我一声。
这个修改耗费了我昨天的业余时间和今天的部分业余时间,付出长达4个小时!如果你喜欢,且方便的情况下,可以给我点个赞吗?
FAQ
我测试在idea全屏下有效!
不要做白嫖党!
版权声明:本文标题:用于macOS的脚本,当idea处于窗口最上层时,增加屏幕亮度,否则降低亮度 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728775380a1172433.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论