用 .net 写了一个 gotify 客户端, Windows GUI 开发还是天下无敌 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
cmos
V2EX    程序员

用 .net 写了一个 gotify 客户端, Windows GUI 开发还是天下无敌

  •  1
     
  •   cmos 97 天前 4751 次点击
    这是一个创建于 97 天前的主题,其中的信息可能已经有所发展或是发生改变。

    gotify 哪里都好,就是没有没有 Windows 客户端,其实要求也不高,有消息了就弹窗提醒即可,也不需要数据库之类的。只可惜一直没有官方客户端,那就自己写一个。手里拿着锤子,看什么都像是钉子

    上次写 Windows GUI 程序,还是 visual basic 年代。第一反应是用顺手的 Golang + Fyne ,但是由于没有跨平台的需求,所以还是用 C#/.net ,选择了 winforms 进行原生开发。不得不说,C#/.net 在 Windows GUI 开发还是天下无敌。只可惜微软脑子转不过来,现在跨平台 GUI 已经没有 C#/.net 什么事情了。

    截图预览

    自定义弹窗通知示例,右上角显示。

    clipboard_20250706142650.png

    主界面示例

    clipboard_20250706142707.png

    系统托盘图标示例

    clipboard_20250706142724.png

    设置窗口示例

    clipboard_20250706142747.png

    第 1 条附言    97 天前
    上传到 GitHub 了,需要的可以自取
    https://github.com/uselibrary/GotifyClient
    20 条回复    2025-07-08 09:01:50 +08:00
    wangweitung
        1
    wangweitung  
       97 天前 via Android
    这个厉害,哪里下载?
    cmos
        2
    cmos  
    OP
       97 天前
    @wangweitung 1#
    上传到 GitHub 了,需要的可以自取
    https://github.com/uselibrary/GotifyClient
    Mithril
        3
    Mithril  
       97 天前   4
    WinForms 非常适合随手弄个小 GUI 程序做点简单的事。
    不需要考虑什么缩放,布局;也没有很高的性能需求时,这就是最简单的解决方案。

    关于 GUI 这东西,包括 Native 和 Web ,我用过尝试过很多技术。MFC ,WinForms ,WPF ,WinUI ,ASP WebForms ,MVC ,Avalonia ,QT ,Angular.js ,Angular 2+,Vue ,React ,还有 Python 的 Gradio ,Java 的 Swing 。

    一堆东西用下来,简单做点小程序最方便的还是 WinForms 拖一拖完事。但凡有显示性能,排版设计等需求,都倾向于用 Web 套壳方便。无论是哪种框架,找个合适的组件库就行。设计风格统一,对于各种问题解决方案也多。

    而就个人喜好而言,WPF 在它那个年代绝对是先行者。MVVM 架构放到现在也不过时。

    至于程序本身的性能需求,反正我做有需求让我上 Web 框架的程序时根本不考虑这个。给我省的时间比在客户那多耗的那点性能对我来说值钱多了。Electron 顶多占你点硬盘,但能给我节省大量设计,实现的精力。

    除非客户有需求,那也好说,谁要的谁就加钱。加够了给你改原生方案,绝对体积小+秒开。
    8820670
        4
    8820670  
       97 天前
    很棒!之前一直在用 winify ,感觉一般般。等试试 op 的
        5
    NoOneNoBody  
       97 天前   1
    纯个人见解
    windows 的通知,调用系统通知 api 比较好,因为人不在电脑旁或者运行全屏事务错过了,也能在通知栏找到
    NoOneNoBody
    itechify
        6
    itechify  
    PRO
       97 天前
    催更,来个验证码自动复制到粘贴板
    cmos
        7
    cmos  
    OP
       97 天前
    @NoOneNoBody 5#
    考虑过这个逻辑,即使是在任务栏,也可能会因为过多而错过。所以直接钉死在屏幕右上角,绝对不会错过提醒。
    cmos
        8
    cmos  
    OP
       97 天前
    @oneisall8955 6#
    等我有空了,我来看看怎么实现。太久没有写 Windows GUI 了,很多东西要边翻文档边写。
    a33291
        9
    a33291  
       97 天前
    @imes #8 Clipboard 直接操作剪贴板就行

    主要是验证码识别,一个 \d{6,}识别到数字就复制一下


    顺便问下,这个 gotify 一般哪些场景用?
    liuliuliuliu
        10
    liuliuliuliu  
    PRO
       96 天前
    跨平台 GUI 也很厉害啊,了解一下 avalonia
    dcsuibian
        11
    dcsuibian  
       96 天前
    微软总是反复横跳、砍产品、改名,跨平台技术真的信不过。没什么凝聚力,怀疑内部是部门斗争状态。
    itechify
        12
    itechify  
    PRO
       96 天前   1
    @a33291 #9 webhook 通知的,别的地方完成了什么任务或者告警,需要通知一下(前提是你这个系统有配置 webhook 通知入口)

    就可以搭建 gotify 服务端接受消息。客户端(安卓,网页版)就收到提醒查看消息

    类似的有:bark (苹果生态),plush+(微信等)
    bxb100
        13
    bxb100  
       96 天前
    推一个 raycast gotify 插件 https://www.raycast.com/Lemon/gotify
    wtks1
        14
    wtks1  
       96 天前
    不错不错,楼主厉害了
    xctcc
        15
    xctcc  
       96 天前 via iPhone
    支持一下
    thfurior
        16
    thfurior  
       96 天前   1
    winform 虽然难看,但做起来是无敌快
    huangliu
        17
    huangliu  
       96 天前
    建议了解下 Avalonia ,用法和 WPF 很像
    yafoo
        18
    yafoo  
       96 天前
    我也有个简单版的 windows 通知客户端: https://github.com/yafoo/pushme-client

    一开始用的 go+fyne ,可能自己是个 go 新手,发现 fyne 想实现一个简单的消息列表都很困难,甚至简单的文字排版效果都无法实现,最后只好换 webview 了。
    levelworm
        19
    levelworm  
       95 天前
    Delphi/Lazarus 据说也不错
    alleluya
        20
    alleluya  
       95 天前
    @Mithril #3 不管是开发还是客户 都不能既要又要
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2757 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 11:49 PVG 19:49 LAX 04:49 JFK 07:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86