getlantern / systray

a cross platfrom Go library to place an icon and menu in the notification area
Apache License 2.0
3.28k stars 451 forks source link

能否添加win系统上的托盘消息功能 #196

Open xiaobingcaicai opened 3 years ago

xiaobingcaicai commented 3 years ago

消息托盘已经具备,可不可以继续扩展,实现托盘区域的消息通知? 由于需求需要 我简单的进行了实现 systray_windows.go 中增加了一个开放接口

//NotifyMessage 任务栏通知
func NotifyMessage(title string, msg string) {
    go func() {
        for wt.nid == nil || wt.nid.Icon == 0 {
        }
        const NIM_MODIFY = 0x00000001
        const NIF_INFO = 0x00000010
        const NIIF_USER = 0x00000004
        const NIIF_LARGE_ICON = 0x00000020

        wt.nid.Flags |= NIF_INFO
        copy(wt.nid.InfoTitle[:], windows.StringToUTF16(title))
        copy(wt.nid.Info[:], windows.StringToUTF16(msg))
        wt.nid.InfoFlags = NIIF_USER | NIIF_LARGE_ICON

        mag, _, build := windows.RtlGetNtVersionNumbers()
        if mag < 5 {
            wt.nid.Size = 152
        } else if mag < 6 {
            wt.nid.Size = 936
        } else if build < 6 {
            wt.nid.Size = 952
        } else {
            wt.nid.Size = 956
        }
        //
        pShellNotifyIcon.Call(uintptr(NIM_MODIFY), uintptr(unsafe.Pointer(wt.nid)))
    }()
}
fy0 commented 2 years ago

win10上似乎不工作,我使用了这个库: https://github.com/gen2brain/beeep

ctaoist commented 2 years ago

作者好像没有添加这个功能的打算,你要不fork一份吧,我们直接引用你那边的库了 不过我这边试了下,好像也不起作用,win10 https://github.com/tadvi/systray 这个库的消息通知是正常的,不过这个库比较老了,我试着移到这边的库,最终还是放弃了

gozeon commented 2 years ago

see https://github.com/gozeon/xtool/blob/340b2458b54e39fd8ec9dd7f0eed8a8b0f639cf9/main.go#L33