我想知道是否有任何库可以帮助我控制另一个窗口。例如,如果用户正在运行calc.exe,我希望我的go代码可以移动它,调整大小,甚至删除它的框架,附加内容,idk。

现在,我只知道如何使用脚本语言(例如autoit或autohotkey或诸如此类)来做到这一点。

最佳答案

是的,可以使用godoc.orggo-search.org找到几个库。在此示例中,我使用w32w32syscall(提供一些其他功能):

package main

import (
    "log"
    "strings"
    "syscall"

    "github.com/AllenDang/w32"
    "github.com/hnakamur/w32syscall"
)

func main() {
    err := w32syscall.EnumWindows(func(hwnd syscall.Handle, lparam uintptr) bool {
        h := w32.HWND(hwnd)
        text := w32.GetWindowText(h)
        if strings.Contains(text, "Calculator") {
            w32.MoveWindow(h, 0, 0, 200, 600, true)
        }
        return true
    }, 0)
    if err != nil {
        log.Fatalln(err)
    }
}

这两个库都仅以最小的包装公开了基础的win32 API,因此您必须从Microsoft阅读corresponding documentation才能真正知道如何使用它们。

10-04 21:31