V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
HFX3389
V2EX  ›  问与答

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

  •  1
     
  •   HFX3389 · 2019-04-10 15:51:54 +08:00 · 8613 次点击
    这是一个创建于 1834 天前的主题,其中的信息可能已经有所发展或是发生改变。

    要求:

    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
    janus77
        19
    janus77  
       2019-04-10 16:45:35 +08:00 via iPhone
    vb 即可
    sagaxu
        20
    sagaxu  
       2019-04-10 16:47:06 +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 也能直接运行
    Abbeyok
        26
    Abbeyok  
       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
        28
    xiri  
       2019-04-10 17:10:36 +08:00
    @hhyvs111 楼主要求体积要小啊,,,,,
    我之前用 Qt 写个简单的文本编辑器,把所有依赖复制出来后文件夹就有 50 多 M 了,,,,,
    Tink
        29
    Tink  
       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。

    微软的东西选他自己的语言,不然后面坑很多的
    0312birdzhang
        35
    0312birdzhang  
       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   ·   我们的愿景   ·   实用小工具   ·   4402 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 86ms · UTC 05:32 · PVG 13:32 · LAX 22:32 · JFK 01:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.