明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2722|回复: 68

[源码] [原创][手把手教]免服务器做自动更新教程【QQ收藏】

  [复制链接]
发表于 2024-5-9 15:43 | 显示全部楼层 |阅读模式
本帖最后由 tryhi 于 2024-5-10 15:19 编辑

想让自己做的程序可以自动更新,但是又没有服务器该怎么做,只要把你的最新程序放到所有人都能访问的地方就可以了,这里讲如何利用QQ收藏来做这个,用很久以前的图种技术,就是把一个VLX文件合并在图片后面伪装成一张图片。
1、准备一张图片,越小越好(记下图片总共多少字节)
2、将你的程序先做好,并打包成vlx
3、将图片跟vlx放到同个目录下,假设图片名字为a.jpg,程序名字为a.vlx并新建一个txt,输入copy /b a.jpg+a.vlx b.jpg 保存后将txt改为bat,如图所示



4、双击bat文件后会得到b.jpg,这张jpg看起来跟a.jpg一摸
一样,但是其尾部其实隐藏了a.vlx的数据
5、打开QQ收藏

6、点击新建笔记、插入图片,选择特殊处理过的图片,然后加上一行文字
vlx-version(20240509)
括号内数字作为最新版本号


用来做版本判断是否要更新

7、右键转发给任意一个联系人


8、从你的联系人里面打开转发的链接,你会得到这个地址,复制下来
https://sharechain.qq.com/0caab955abff65fcd0e5392c483c5275
这个地址将填到你的程序里面



到这里基本工作已经完成了,接下来测试一下代码
  1. (setq wy(try-get-url "https://sharechain.qq.com/0caab955abff65fcd0e5392c483c5275"));这里填写你收藏的地址
  2. (setq 获取版本号(try-StrRegExp wy "vlx-version\\([^)]+"))
  3. (setq 版本号(substr (car 获取版本号) 13))
  4. (setq 下载地址(car(try-StrRegExp wy "http://shp.qpic\\.cn/collector[^\")]+")))
  5. (try-DownLoad 下载地址 "c:\\b.jpg");下载图片
  6. (setq a(try-file-ReadBinary10 "c:\\b.jpg"));读取图片
  7. (try-file-WriteBinary10 "c:\\a.vlx" (try-lst-move-head a 16194 ));剥离图片,这里的16194是原始图片的大小(字节数)


这段代码跑一下,看看C盘有没有出现一个a.vlx文件,有的话表示搭建正常
注:有基础的人看到这里应该知道接下来怎么做了,因为核心就是如何解决下载问题



9、下载“自动更新示例.lsp”,把这两个变量改为你对应的收藏地址跟图片大小


10、编译为VXL,把syz-vlx-path.fas放到最前面,自动更新示例.lsp放到第二进行编译(注:关于syz-vlx-path.fas请看baitang36的帖子[经验] 【原创】精确获取vlx的加载位置

11、新编译的VLX跟原始图片合并在一起(详见第1步),然后更新图片
完成,你的VLX就可以通过QQ收藏来控制更新了
  1. ;;定义当前的版本号,为了节约代码,使用日期作为版本,能力强的同学可以用标准版本号格式
  2. (setq *banben* 20240508)

  3. (setq
  4.   *收藏地址* "https://sharechain.qq.com/0caab955abff65fcd0e5392c483c5275" ;注意,这个地址必须是你自己的收藏地址,本文仅做示例
  5.   *原始图片大小* 16194 ;这里的16194是原始图片的大小(字节数)
  6. )

  7. (if SYZ-VLX-PATH ;这里使用baitang36的获取vlx路径的fas
  8.   (progn
  9.     (setq *vlx路径*  (vl-catch-all-apply 'SYZ-VLX-PATH nil))
  10.     (if (vl-catch-all-error-p *vlx路径* )
  11.       (setq *vlx路径*  nil)
  12.     )
  13.   )
  14. )


  15. (defun 获取远程下载链接及版本号 (/ wy 版本号 获取版本号 获取下载地址 下载地址)
  16.   (setq wy(try-get-url *收藏地址*);这里填写你收藏的地址
  17.     获取版本号(try-StrRegExp wy "vlx-version\\([^)]+")
  18.     版本号(substr (car 获取版本号) 13)
  19.     获取下载地址(try-StrRegExp wy "vlx-download\\([^)]+");注意,这里必须按照格式来,粘贴的地址必须是纯文本
  20.     下载地址(substr (car 获取下载地址) 14))
  21.   (list (atoi 版本号)下载地址)
  22. )



  23. (setq 版本-地址(vl-catch-all-apply '获取远程下载链接及版本号));拦截错误,避免无网络等原因导致阻塞

  24. (if (vl-catch-all-error-p 版本-地址 )
  25.   (princ"\n获取远程版本失败")
  26.   (if (< *banben* (car 版本-地址));当前版本小于远程版本,需要更新
  27.     (progn
  28.       (setq 临时文件(vl-filename-mktemp "b.jpg") )
  29.       (try-DownLoad (cadr 版本-地址) 临时文件);下载图片
  30.       (setq a(try-file-ReadBinary10 临时文件));读取图片
  31.       (vl-file-delete 临时文件)
  32.       (setq 临时文件vlx(vl-filename-mktemp "a.vlx") )
  33.       (try-file-WriteBinary10 临时文件vlx (try-lst-move-head a *原始图片大小* ));剥离图片,这里的16194是原始图片的大小(字节数)
  34.       (if *vlx路径*
  35.         (progn
  36.           (vl-file-delete *vlx路径*);删除自身
  37.           (vl-file-rename 临时文件vlx *vlx路径*);移动并重命名至指定目录
  38.           (princ "\n自动更新完成")
  39.         )
  40.         (alert"当前版本过旧,无法获取自身路径,请手动更新")
  41.       )
  42.     )
  43.     (princ "\n当前版本为最新版")
  44.   )
  45. )

  46. ;主程序开始……
引用一下5楼的总结
总结一下就是:
1.准备原始图片a
2.将vlx文件打包进图片,附在图片数据后部,生成图片b
3.找图床,并标记版本
4.网络访问,判断版本,下载b
5.剔除图片a的数据,得到vlx
6.判断版本,如果当前版本没有远程版本新,则删除自身,把新版本覆盖过来




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 12明经币 +15 金钱 +58 收起 理由
vip-happy + 1 + 10 很给力!
xiaocainiao + 1 很给力!
magicheno + 1
菜鸟初来乍到 + 1 很给力!
spp_wall + 1
zhoupeng220 + 1 很给力!
tomonkey239 + 1 赞一个!
pzweng + 2 + 18 很给力!
飞雪神光 + 1 666
仲文玉 + 3 很给力!

查看全部评分

"觉得好,就打赏"
    共1人打赏
发表于 2024-5-10 04:16 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2024-5-10 04:26 编辑

图片容易被重渲染,所以复制到尾巴其实很容易被抓出来.
最好的方法是藏到霍夫曼树里面...嘻嘻
https://www.zhihu.com/question/607058738
回复 支持 1 反对 0

使用道具 举报

发表于 2024-5-9 17:03 | 显示全部楼层
总结一下就是:
1.准备原始图片a
2.将vlx文件打包进图片,附在图片数据后部,生成图片b
3.找图床,并标记版本
4.网络访问,判断版本,下载b
5.剔除图片a的数据,得到vlx

思路确实赞!

评分

参与人数 1明经币 +1 收起 理由
tryhi + 1 总结很到位,找到能下载原图的图床也可以

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2024-6-4 20:37 | 显示全部楼层
本帖最后由 south 于 2024-6-4 20:41 编辑

复制代码
  1. (setq wy (try-get-url "https://sharechain.qq.com/0caab955abff65fcd0e5392c483c5275"));这里填写你收藏的地址
  2. (setq 获取版本号 (try-StrRegExp wy "vlx-version\\([^)]+"))
  3. (setq 版本号 (substr (car 获取版本号) 13))
  4. (setq 下载地址 (car (try-StrRegExp wy "http://shp.qpic\\.cn/collector[^\")]+")))
  5. (try-DownLoad 下载地址 "c:\\b.jpg");下载图片
  6. (setq a (try-file-ReadBinary10 "c:\\b.jpg"));读取图片
  7. (try-file-WriteBinary10 "c:\\a.vlx" (try-lst-move-head a 16194));剥离图片,这里的16194是原始图片的大小(字节数)



这个代码测试会出现这个了,是咋回事呢,是不是收藏夹实现不了下载了
换成自己打包的文件也是不行,请大佬指教
; 错误: ActiveX 服务器返回错误:
非选择性的参数。


发表于 2024-5-9 15:55 | 显示全部楼层
学到了啊,大海哥
发表于 2024-5-9 16:58 | 显示全部楼层
每天来学习一点!
发表于 2024-5-9 17:03 | 显示全部楼层
弄个exe文件会不会被杀毒软件杀掉
 楼主| 发表于 2024-5-9 17:48 | 显示全部楼层
言戲無軍 发表于 2024-5-9 17:03
弄个exe文件会不会被杀毒软件杀掉

首先,关exe什么事?
其次,杀不杀看exe,不看你加的数据
发表于 2024-5-9 18:14 | 显示全部楼层
厉害!拜服学习到了,谢谢大神分享这么优秀的程序
发表于 2024-5-9 19:25 | 显示全部楼层
感谢大佬分享教程!
发表于 2024-5-9 19:41 | 显示全部楼层
学习到了,太厉害了,大佬
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-6-22 20:45 , Processed in 0.179965 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表