做一个 GUI 小工具,同时支持 XP、Windows 7、Windows10,需要使用什么语言最好 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HFX3389
V2EX    问与答

做一个 GUI 小工具,同时支持 XP、Windows 7、Windows10,需要使用什么语言最好

  •  1
     
  •   HFX3389 2019-04-10 15:51:54 +08:00 10070 次点击

    这是一个创建于 2390 天前的主题,其中的信息可能已经有所发展或是发生改变。

    要求:

    1. 不要太大。比如使用下面那个例子做一个倒计时,大小来个 10M 就太夸张了!

    2. 在使用 MSDN 原盘安装的 XP、Win7、Win10 系统下皆可双击 EXE 就运行

    例如:

    做一个 GUI 倒计时,弄个计时器(用于每 1000 毫秒倒数)、一个编辑框(用于输入正数)、两个按钮(用于开始倒数、停止倒数)、一个标签(特大红色,用于显示倒数)

    118 条回复    2019-04-13 23:51:11 +08:00
    1  2  
    imicksoft
        1
    imicksoft  
       2019-04-10 15:54:50 +08:00
    aardio,你值得拥有
    hs0000t
        2
    hs0000t  
       2019-04-10 15:55:30 +08:00 via Android   2
    易语言(
    azh7138m
        3
    azh7138m  
       2019-04-10 15:58:29 +08:00 via Android
    MFC VC++吧。。。想不到啥好的还能支持 XP 的了
    dapang1221
        4
    dapang1221  
       2019-04-10 15:58:51 +08:00
    我想了想,这个需求用易语言可能还真是个不错的选择……
    Rysle
        5
    Rysle  
       2019-04-10 16:09:53 +08:00
    Visual Basic 6.0
    老古董,值得拥有,哈哈哈
    CallMeReznov
        6
    CallMeReznov  
       2019-04-10 16:11:11 +08:00
    在不涉及 C++运行库 .NET 版本的情况下
    VB C# C++ 都可以吧?
    qysz
        7
    qysz  
       2019-04-10 16:12:13 +08:00
    Delphi 了解下
    HFX3389
        8
    HFX3389  
    OP
       2019-04-10 16:16:07 +08:00
    @hs0000t
    @dapang1221
    额,我刚找了下朋友,易语言做这种小东西好像还真不错的样子,但是我丢虚拟机里马上就被 360 当成木马干掉了......
    而且易语言好像稍微大型点的东西就不好用了吧.....
    nfroot
        9
    nfroot  
       2019-04-10 16:18:52 +08:00   1
    @HFX3389 主题里面写要小,举个例子也是微型的,怎么一圈回复后您又说要大型项目了呢。

    所以……你会啥语言?
    yejinmo
        10
    yejinmo  
       2019-04-10 16:18:58 +08:00
    Windows 开发不推荐 C# ?
    ThirdFlame
        11
    ThirdFlame  
       2019-04-10 16:21:19 +08:00
    vb autoit 不都行么
    Counter
        12
    Counter  
       2019-04-10 16:21:48 +08:00
    很明显 C#(WinForm),拖拖控件就好,计时器都有控件,纯代码不含图标等资源编译后最多也就几十 KB
    XP 初始环境自带.net framework 2.0,编译时注意版本就好

    @yejinmo C#地位在这里很不行啊
    loginv2
        13
    loginv2  
       2019-04-10 16:23:44 +08:00
    delphi7
    yejinmo
        14
    yejinmo  
       2019-04-10 16:24:08 +08:00
    @Counter #12

    iV2ex 各种看不上微软啊
    Counter
        15
    Counter  
       2019-04-10 16:36:58 +08:00
    @yejinmo 查了一下 XP 没有自带.net ,只能另外安装了
    yejinmo
        16
    yejinmo  
       2019-04-10 16:38:23 +08:00
    @Counter #15

    Visual Basic 所有系统都可以
    ysc3839
        17
    ysc3839  
       2019-04-10 16:38:55 +08:00   1
    @yejinmo C# 要装运行库,算上的话就超过 10M 了。
    现在搞 Windows 开发,如果要开放、免费、仍在维护、编译后体积小的话大概只有 C++ 了。
    VB6 不再维护了;易语言收费且几乎不再维护了; aardio 据说仅有作者一人维护,而且作者风评不好。
    Delphi 目前仍在维护,不过似乎不免费?
    boris1993
        18
    boris1993  
       2019-04-10 16:39:01 +08:00 via Android
    .Net 系呗,分发的时候附带适用各系统的.Net 环境安装包,以及指导 README
    rb6221
        19
    rb6221  
       2019-04-10 16:45:35 +08:00 via iPhone
    vb 即可
    sagaxu
        20
    sagaxu  
       2019-04-10 16:47:0 +08:00 via Android
    Wxwidgets
    z99monster
        21
    z99monster  
       2019-04-10 16:50:37 +08:00
    Qt,控件拖拽很简单
    HFX3389
        22
    HFX3389  
    OP
       2019-04-10 16:58:54 +08:00
    @nfroot #9 我只是有个想法,有小型就有中型和大型嘛,只是想想嘛!
    hhyvs111
        23
    hhyvs111  
       2019-04-10 16:59:36 +08:00
    用 qt
    sneezry
        24
    sneezry  
       2019-04-10 17:03:31 +08:00 via iPhone
    c#
    muyi
        25
    muyi  
       2019-04-10 17:05:17 +08:00
    delphi,例如描述的这种小程序,编译出来就一个 exe 可执行文件,无需任何运行库,XP 也能直接运行
    Ct5T66PVR1bW7b2z
        26
    Ct5T66PVR1bW7b2z  
       2019-04-10 17:05:44 +08:00 via Android
    Python



    首先排除
    wfd0807
        27
    wfd0807  
       2019-04-10 17:05:49 +08:00   2
    asm+win32api 编译出 exe 非常小,几 KB (滑稽)
    xiri
       
    xiri  
       2019-04-10 17:10:36 +08:00
    @hhyvs111 楼主要求体积要小啊,,,,,
    我之前用 Qt 写个简单的文本编辑器,把所有依赖复制出来后文件夹就有 50 多 M 了,,,,,
    Tink
        29
    Tink  
    PRO
       2019-04-10 17:18:58 +08:00 via iPhone
    其实 delphi 可以
    amaranthf
        30
    amaranthf  
       2019-04-10 17:27:42 +08:00
    @wfd0807 用 win32 api 的话,C++也可以达到类似的大小,去除 CRT 的初始化、各个节压缩到一起,1~2KB 的 hello world 就出来了
    Akkuman
        31
    Akkuman  
       2019-04-10 17:29:46 +08:00 via Android
    delphi 有社区版了,另外,purebasic 咋样,aardio 也行,要不 autohotkey 或者 autoit3 ?或者易语言?或者 lazarus ?
    hmzt
        32
    hmzt  
       2019-04-10 18:23:00 +08:00
    vb
    thedrwu
        33
    thedrwu  
       2019-04-10 19:08:03 +08:00 via Android
    直接 win32api,如果用 c 写,连 crt 都不必要。
    mmdsun
        34
    mmdsun  
       2019-04-10 19:25:52 +08:00 via Android
    winform,c# ,visual studio。

    微软的东西选他自己的语言,不然后面坑很多的
    1daydayde
        35
    1daydayde  
       2019-04-10 19:49:34 +08:00   1
    这需求一个 html 文件就搞定了,2kb 搞定(滑稽
    H0H
        36
    H0H  
       2019-04-10 20:09:13 +08:00
    用 Win32ASM 汇编语言调用 Win32 API 实现,可同时兼容 win32 和 x64 Windows 系统。写出来的程序因仅调用最基础的那几个 dll,理论上讲只要 Windows 系统能启动进入到桌面,那你的工具就一定能运行起来,稳定性巨高。

    如果不带 icon 图像等资源文件的话,编译出的 exe 文件仅 5KB 左右,极小。

    具体书籍参考罗云彬的《琢石成器 Windows 环境下 32 位汇编程序设计》。
    geelaw
        37
    geelaw  
       2019-04-10 20:24:53 +08:00
    这个用纯粹的 Win32 就可以做。
    LZSZ
        38
    LZSZ  
       2019-04-10 20:27:40 +08:00
    delphi 7.0
    murmur
        39
    murmur  
       2019-04-10 20:35:54 +08:00
    当然是 vb
    HFX3389
        40
    HFX3389  
    OP
       2019-04-10 21:31:46 +08:00
    @0312birdzhang #35 这好像有点意思!我咋没想到弄个 HTML 算了
    HFX3389
        41
    HFX3389  
    OP
       2019-04-10 21:32:13 +08:00
    @0312birdzhang #35 倒计时可以这样玩玩
    ho121
        42
    ho121  
       2019-04-10 21:34:02 +08:00 via Android
    @HFX3389 ie6 咋破?
    HFX3389
        43
    HFX3389  
    OP
       2019-04-10 21:35:37 +08:00
    @ho121 #42 ie6 连这种小东西都做不好吗?有这么垃圾么..............
    huijiewei
        44
    huijiewei  
       2019-04-10 21:47:28 +08:00
    啥也别想了,autoit 走起
    admirez
        45
    admirez  
       2019-04-10 22:02:45 +08:00
    当然是 delphi
    twor
        46
    twor  
       2019-04-10 22:37:22 +08:00 via Android
    为了封装一个 GUI 报表工具,现学了 Delphi,蛮好
    kiddult
        47
    kiddult  
       2019-04-10 22:54:16 +08:00
    都什么年代了,还纠结文件大小

    直接 Electron 走起,完美兼容各种 PC 环境
    anyele
        48
    anyele  
       2019-04-10 23:01:08 +08:00 via Android
    明显是 c#,winform,.net 版本选低一点
    inframe
        49
    inframe  
       2019-04-10 23:08:31 +08:00 via Android
    # ,桌面开发库够多,初中级文档齐全
    kokutou
        50
    kokutou  
       2019-04-10 23:20:31 +08:00   1
    HFX3389
        51
    HFX3389  
    OP
       2019-04-10 23:21:43 +08:00
    @CallMeReznov #6
    @yejinmo #10
    @sneezry #24
    @mmdsun #34
    @anyele #48
    @inframe #49
    要求在 MSDN 原盘安装的 XP 亦可即点即用
    yzwduck
        52
    yzwduck  
       2019-04-10 23:41:30 +08:00 via Android
    @H0H 写 asm 太折磨人了,用 C 写更现实一些。我写过几个不依赖 vcruntime 的代码,能同时兼容 xp 和 per-monitor DPI awareness,体积不会比 asm 代码大太多。
    yamedie
        53
    yamedie  
       2019-04-10 23:47:08 +08:00 via Android
    @kiddult electron 不支持 xp,所以应该选 NW.js
    Chingim
        54
    Chingim  
       2019-04-10 23:51:04 +08:00 via Android
    js ?直接在 ie 跑
    ysc3839
        55
    ysc3839  
       2019-04-10 23:54:04 +08:00 via Android
    @kokutou 这不是编程语言。
    这种做法并不一定稳定,从该项目的 issues 可以看出有许多问题。
    flynaj
        56
    flynaj  
       2019-04-11 00:09:40 +08:00 via Android
    tcc 编译器,里面有例子,几十 k 就可以
    msg7086
        57
    msg7086  
       2019-04-11 00:15:25 +08:00
    C 井,VB6,Delphi,好像都挺好的。
    Mac
        58
    Mac  
       2019-04-11 00:33:51 +08:00 via Android
    vb6 基本库在 win7 及以上都不需要另装动态链接库
    mmdsun
        59
    mmdsun  
       2019-04-11 00:41:54 +08:00 via Android
    @HFX3389 xp sp3 自带有.net 2.0 环境。选.net 2.0 或 1.0 开发就可以了 xp 可以打开。
    patr0nus
        60
    patr0nus  
       2019-04-11 00:59:14 +08:00
    Wxwidgets +1
    sneezry
        61
    sneezry  
       2019-04-11 01:03:13 +08:00
    @HFX3389 C#是可以编译成机器码的,XP 可以用。.NET 框架倒是可能会要求额外安装,如果没用到.NET 是不需要用户额外安装什么东西的
    H0H
        62
    H0H  
       2019-04-11 01:16:09 +08:00
    @yzwduck 以前用 VS2010 写过,但很容易就把 vc runtime 带进去了,忘了多大,好像好几兆吧。貌似 VS 未提供仅将用到的那几个函数编译进去的功能,反正我是没找到。

    如果用纯 C 调用 Win32 API,好像 C runtime 又会被打进去或动态链接到。虽然 XP 系统开始就已经自带了 C runtime 6.0,但总希望自己的 exe 能再健壮点比如往前把 2000 和 98 也支持了。虽然这些老系统用不到,但 exe 未经修改就能在上面运行,毕竟显得霸气:)

    一般写这种 GUI 小工具,下意识就希望 exe 越小越好,不要依赖其他 dll,很容易有强迫症,最终就是 asm 上了^_^
    yingyue
        63
    yingyue  
       2019-04-11 01:25:39 +08:00 via Android
    易语言能做的很好
    yingyue
        64
    yingyue  
       2019-04-11 01:28:20 +08:00 via Android
    360 报毒,只需要做好后,360 提交一下就好了
    xzpjerry731
        65
    xzpjerry731  
       2019-04-11 05:23:56 +08:00
    python + pyinstaller
    lmmortal
        66
    lmmortal  
       2019-04-11 05:37:59 +08:00 via iPhone
    @yingyue 看了一下是收费的,对于个人来说 写个小工具什么的可不便宜啊
    zwh2698
        67
    zwh2698  
       2019-04-11 06:46:07 +08:00 via Android
    Mfc 或者 api, mfc 界面可以使用 prof-ui, 纯 API 的,贴图重绘,界面绝对不输现在的界面风格。
    hp3325
        68
    hp3325  
       2019-04-11 06:49:09 +08:00 via Android
    Delphi,唯一选择。

    从 XP 到 WIN10 全覆盖,即使集成 webbrowser 进去,再加一堆复杂逻辑,都不会超过 3M。

    最重要的,一个 exe,下载即可使用,不需要任何动态链接库!
    exip
        69
    exip  
       2019-04-11 07:25:01 +08:00 via Android
    用 vbs 或 Javascript 加 html 写个网页保存成 hta 文件,估计不到 10KB.
    NicholasYX
        70
    NicholasYX  
       2019-04-11 08:06:57 +08:00 via iPhone
    C#啊
    v2orz
        71
    v2orz  
       2019-04-11 08:13:29 +08:00
    这个东西应该是有现成的吧,我看部门助理在会上放 ppt 的时候在用
    TaylorJack123
        72
    TaylorJack123  
       2019-04-11 08:18:38 +08:00 via Android
    duilib 框架,c++写的,用起来贼爽所有的 windows 都可以用
    sdushn
        73
    sdushn  
       2019-04-11 08:36:38 +08:00 via Android
    做个 web 可还行?
    ysc3839
        74
    ysc3839  
       2019-04-11 08:51:30 +08:00 via Android
    @H0H 除了自动链接的 entrypoint stub,其他函数是用了才会链接。微软没这么傻,不信你可以自己用一个 static library 试试看会不会全部都编译进去。
    我个人印象中 VS2017 用向导创建的 C++ Win32 GUI app,完全使用静态链接编译出来才 70 KB。我自己用 C++ 编写的一个程序,使用了 rapidjson, libcurl, zlib 以及一些 7-Zip 的代码,同时也是完全静态链接,编译出来才 900 KB 左右。
    没记错的话 VS2017 C++ 程序仍然可以在 Windows 2000 下运行,一个例子是 ConEmu。
    不想依赖其他 dll 请使用静态链接,手写 asm 的话未必比编译器优化的好。
    Cloutain
        75
    Cloutain  
       2019-04-11 09:21:48 +08:00
    还用想吗 当然是易语言了,你这个程序说不定一个易模块就解决了
    simonsww
        76
    simonsww  
       2019-04-11 09:36:00 +08:00
    拿几分钟用易语言写个完事。。
    H0H
        77
    H0H  
       2019-04-11 09:37:53 +08:00
    @ysc3839 我也是比较早以前用 VS2010 时,当时是做一个右键菜单 dll 供 Explorer 调用,记不清有没有用到 MFC。当时静态链接大小大体上等于『动态链接大小+vc runtime 10.dll 』。因为 32 位汇编比较好写,不像 64 位全部用寄存器传参。所以当时 32 位 dll 就用汇编实现,文件很小; 64 位 dll 就用 vc 编译,贼大。

    当时手写 asm 也不是期望比编译器优化好,就是想让其能保持最小。有这个需求也是因为当时做的工具是在公司内部使用,同事们觉得好的工具会用邮件给其他人分享,而邮件附件大小限制是不能超过 20M。
    rming
        78
    rming  
       2019-04-11 09:39:37 +08:00
    html + Javascript ...
    murmur
        79
    murmur  
       2019-04-11 09:44:44 +08:00
    @kiddult electron 不支持 xp nw.js 的老版本才支持
    ysc3839
        80
    ysc3839  
       2019-04-11 09:47:00 +08:00 via Android
    @H0H 手写 asm 小是因为没链接别的库。
    除去别的库,编译器优化出来的代码可能比手写还要小,VC++ 有最小体积的优化选项。再把入口点改成自己的函数,不使用运行库的入口点,然后完全不调用 C/C++ 函数,也能做得很小。
    maemolee
        81
    maemolee  
       2019-04-11 09:53:16 +08:00
    其实弄个网页版就行吧……
    maemolee
        82
    maemolee  
       2019-04-11 09:53:55 +08:00
    给你看一下我的泡面计时器: https://www.maemo.cc/timer.html
    Felldeadbird
        83
    Felldeadbird  
       2019-04-11 09:56:42 +08:00
    vb 应该是最简单了吧。
    不过我还是习惯 py + qy 组合写 GUI。真的轻快。因为我不熟其他语言。
    shuax
        84
    shuax  
       2019-04-11 09:58:17 +08:00
    win32 api
    yingfengi
        85
    yingfengi  
       2019-04-11 10:03:12 +08:00 via Android
    html
    zthxxx
        86
    zthxxx  
       2019-04-11 10:06:48 +08:00
    谢邀,React
    youyaang
        87
    youyaang  
       2019-04-11 10:15:19 +08:00
    易语言现在其实不怎么会报毒了,你可以试试换成黑月编译或者换个编译器试试
    liuxey
        88
    liuxey  
       2019-04-11 10:16:40 +08:00
    推荐个简单粗暴的,hta 程序,可以搜索下 mshta.exe 这个组件

    简单的讲就是 html 直接以程序方式打开,倒计时什么的用 html 写不是分分钟的事嘛~
    lscho
        89
    lscho  
       2019-04-11 10:19:39 +08:00
    就这功能? vb 五分钟就写出来了,编译出来几十 kb。都能运行
    wackyjazz1
        90
    wackyjazz1  
       2019-04-11 11:02:55 +08:00
    C# 十分就能
    jackmod
        91
    jackmod  
       2019-04-11 11:07:00 +08:00
    https://github.com/sgqy/qt-static-lib

    以前搞了个 Qt 的静态库,支持 xp ( 7 以后的 pe 格式不兼容 xp )。
    Qt 的许可证是 LGPL,对静态库有限制(只是提醒一下)。
    panlilu
        92
    panlilu  
       2019-04-11 11:07:10 +08:00
    还有这么多人记得 Delphi 啊 23333
    kknd22
        93
    kknd22  
       2019-04-11 11:14:44 +08:00   1
    Delphi 7 合适
    python3 打包出来的不支持 XP,2 打包出来的,最小 5MB
    delphi 只需要几十 KB,而且一半是定制的图标。。。
    old9
        94
    old9  
       2019-04-11 11:30:54 +08:00
    autohotkey
    GeruzoniAnsasu
        95
    GeruzoniAnsasu  
       2019-04-11 11:41:05 +08:00
    imicksoft 19 小时 41 分钟前

    截止至本回复本帖存在的时间已经足够用 mfc c# vb html delphi 易语言
    各撸一个版本了
    HFX3389
        96
    HFX3389  
    OP
       2019-04-11 11:45:59 +08:00
    @qysz #7
    @loginv2 #13
    @ysc3839 #17
    @muyi #25
    @Tink #29
    @Akkuman #31
    @LZSZ #38
    @admirez #45
    @twor #46
    @msg7086 #57
    @hp3325 #68
    @panlilu #92
    @kknd22 #93
    为啥 Delphi 这么 6,EXE 不需要运行库都可以直接运行啊?
    xth12138
        97
    xth12138  
       2019-04-11 11:50:51 +08:00 via Android
    @Abbeyok pyqt ?
    msg7086
        98
    msg7086  
       2019-04-11 11:51:56 +08:00
    @HFX3389 因为把运行库打包在 EXE 里了。
    allgy
        99
    allgy  
       2019-04-11 11:56:49 +08:00
    java FX9
    muyi
        100
    muyi  
       2019-04-11 11:58:19 +08:00
    @HFX3389 #95 Delphi 编译选项里有个“ build with runtime package ”设置,不勾时,所有用到的 Bpl 包都会打包进 exe 文件中
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2613 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 14:49 PVG 22:49 LAX 07:49 JFK 10:49
    Do have faith in what you're doing.
    ubao msn 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