为不同的窗口分配不同的边框?

问题描述 投票:0回答:1

我有这个脚本,它在任何活动窗口周围绘制边框:

    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

;等等

请提供任何帮助!

scripting autohotkey
1个回答
0
投票

这是执行 @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 毫秒调用一次。

如果我从头开始编写它,为了使其更加通用,我可能会设置单独的对象,然后根据当前活动窗口调用正确的对象。

© www.soinside.com 2019 - 2024. All rights reserved.