此源码也是SEC编程软件,在线安装程序正式使用的代码。代码里既有中文也有英文,因为并不是为了教学展示所用,部分代码都是直接复制来的。出于实用性目的,也不必要再全部转换成中文。
一、新建一个初级程序,在窗体上”画“一个进度条,命名为”进度“,然后再画一个按钮,标题写”开始安装“。如下图所示
二、代码部分如下,可全部复制过去替换。
导入 打开 络 别名 InternetOpenA 支持库 “wininet.dll”,5;
导入 打开 址 别名 InternetOpenUrlA 支持库 “wininet.dll”,6;
导入 址信息 别名 HttpQueryInfoA 支持库 “wininet.dll”,5;
导入 读取 址 别名 InternetReadFile 支持库 “wininet.dll”,4;
导入 关闭 址 别名 InternetCloseHandle 支持库 “wininet.dll”,1;
导入 释放内存 别名 CoTaskMemFree 支持库 “ole32.dll”,1;
类型 浏览窗{整数 窗口,目录,路径,标题,选项,回调,参数,图像;}
常量 不写缓存=$84000000, 址状态=$20000013, 件长度=$20000005;
整数 络, 件,信息,信息长度=4,缓冲区,文件,校验,CRC,命令,dat,file,fn=1,fl=20,iv,ln=2,ls,tp;
文本 址[80]=”
https://zx-1252114143.cos.ap-guangzhou.myqcloud.com/sec.txt”;浏览窗 选窗;
小程序 窗体消息(整数 窗口,整数 消息,整数 参数,整数 数据);
判断(消息)
为 窗口关闭 {停止(0);}
为 单击左键 {开始安装;}
否则{DefWindowProc(窗口,消息,参数,数据);}
结束;
小程序 窗体启动();
络= 打开 络(0, 0, 0, 0, 0);
CRC=malloc(10240);校验=?+1024;命令=?+4000;fn=?+70;
缓冲区=?+26;file=strchr( 址+10,47)+1;校验表(CRC);
列举 选窗{
.窗口= 窗体;
.路径 = 命令;
.标题 = “请选择安装路径”;
.选项= 0065;}
读取消息();
结束;
小程序 CRC32(整数 pat);
文件=fopen(pat,”rb”);
如果(文件>0){fseek(文件, 0, 2);
ln=ftell(文件);fseek(文件, 0, 0);
dat= malloc(ln+1);fread(dat,ln,1,文件);
fclose(文件);iv=校验数据(dat,ln);free(dat);文件=0;}
返回(iv);
结束;
小程序 开始安装;
ln= SHBrowseForFolder(选窗);
SHGetPathFromIDList(ln,命令);
如果(strlen(命令)<5){返回;}
SetWindowText(窗体, 命令);
释放内存(ln);
下载文件(0);检查文件();
结束;
小程序 检查文件();
如果(fl=0){返回;}
tp=strtok(校验,”rn”);换行@
sscanf(tp,”%X %s”,@ls,fn);
如果(ls=0){DeleteFile(fn);} 否则{
格式化(file,”%s.zip”,fn);DeleteFile(file);
如果(ls!=CRC32(fn)){DeleteFile(fn);iv=strrchr(fn,92);
如果(iv=0){GetCurrentDirectory(26,fn);}否则{iv(1)=0;}
CreateDirectory(fn,0);格式化(命令,”-r -F:* %s %s”,file,fn);
Sleep(100);下载文件(1);}}tp=strtok(0,”rn”);
如果(tp>0){tp(-2)%=$A0D;跳到 换行;}信息框(0,”安装完成”,”提示”,$40);
ShellExecute(0, “Open”, “sec.exe”, 0, 0, SW_SHOW);
结束;
小程序 校验表(整数 数据);
指令[
8B7D0830C90FB6C1B508D1E87305352083B8EDFECD75F3ABFEC175E9];
结束;
小程序 校验数据(整数 数据,整数 长度);
指令[8B75088B4D0C8B3D];置入[地址 CRC];
指令[
31C04831DB8A1E30C3C1E80833049F464975F283F0FF];
结束;
小程序 下载文件(整数 fm);
件=打开 址( 络, 址, 0, 0, 不写缓存, 0);
址信息( 件, 址状态, @信息, @信息长度, 0);
如果(信息=200){ 址信息( 件, 件长度, @信息, @信息长度, 0);ln=信息;
如果(信息<50 或者 信息>5120){信息=5120;}fl=0;
如果(fm=1){文件=fopen(file,”wb+”);}重读:
读取 址( 件, 缓冲区, 信息, @ls);如果(ls>0){
fl+=ls;判断(fm)为 0{Copy(校验,缓冲区,ls);}
为 1{fwrite(缓冲区,ls,1,文件);iv=fl*100/ln;
SendMessage(进度,$402,iv,0);}跳到 重读;}
判断(fm)
为 0{校验(fl)=0;}
为 1{fclose(文件);文件=0;
ShellExecute(0, “Open”, “expand.exe”, 命令, 0, 0);}
}否则{信息框(0,file,”无法下载”,$10);}关闭 址( 件);
结束;
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!