我有这个脚本,它在任何活动窗口周围绘制边框:
C := DrawRect((*) => WinActive('A'))
SetTimer(C, 100)
class DrawRect extends Gui {
__New(func := (*) => WinExist('A'), border_thickness := "3", border_color := "red", offset := 0) {
this.func := func
this.border_thickness := border_thickness
this.offset := offset
super.__New("+AlwaysOnTop -Caption +ToolWindow", "GUI4Boarder")
super.BackColor := border_color
}
Call() {
if (win := this.func()) && WinGetMinMax(win) == 0 {
WinGetPos(&x, &y, &w, &h, win)
offset := this.offset
border_thickness := this.border_thickness
outerX := offset
outerY := offset
outerX2 := w - offset
outerY2 := h - offset
innerX := border_thickness + offset
innerY := border_thickness + offset
innerX2 := w - border_thickness - offset
innerY2 := h - border_thickness - offset
WinSetRegion(outerX "-" outerY " " outerX2 "-" outerY " " outerX2 "-" outerY2 " " outerX "-" outerY2 " " outerX "-" outerY " " innerX "-" innerY " " innerX2 "-" innerY " " innerX2 "-" innerY2 " " innerX "-" innerY2 " " innerX "-" innerY, super.Hwnd)
super.Show("w" . w . " h" . h . " x" . x . " y" . y . " NoActivate")
super.Opt("+E0x800A8")
} else {
;WinSetRegion("0-0 w0 h0", super.Hwnd)
super.Hide()
}
}
}
我想为不同的窗口分配不同的边框(边框厚度、边框颜色和偏移量)?
例如:
对于记事本:
边框厚度:=“4”,边框颜色:=“绿色”,偏移量:=1
适用于微软商店:
边框厚度:=“2”,边框颜色:=“红色”,偏移量:=3
;等等
请提供任何帮助!
这是执行 @PGilm 建议的一种方法。这不是最雄辩的解决方案,但它应该能够满足您的需求。
您可以在
Call()
的 DrawRect
方法中,在前四行之后添加这样的内容
if (win := this.func()) && WinGetMinMax(win) == 0 {
WinGetPos(&x, &y, &w, &h, win)
offset := this.offset
border_thickness := this.border_thickness
添加
title := WinGetTitle("ahk_id " win)
if (title ~= "- Notepad$") {
border_thickness := 4
offset := 1
super.BackColor := "green"
} else if (title == "Microsoft Store") {
border_thickness := 2
offset := 3
super.BackColor := "red"
} else {
super.BackColor := this.border_color
}
此外,您需要将
__New()
方法中的行从 更改为
super.BackColor := border_color
到
this.border_color := border_color
为了存储默认值
border_color
。
发生的情况是
SetTimer
被传递给一个函数对象,并且它的 Call()
方法将每 100 毫秒调用一次。
如果我从头开始编写它,为了使其更加通用,我可能会设置单独的对象,然后根据当前活动窗口调用正确的对象。