分类
易语言模块源码

libmySQL6.1模块源码

libmySQL6.1模块源码

.版本 2 .支持库 spec .程序集 libmySQL .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码 _临时子程序 () ' 在初始化代码执行完毕后调用测试代码 返回 (0) ' 可以根据您的需要返回任意数值 .子程序 _临时子程序 ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。 .子程序 demo .局部变量 _libmySQL, _libmySQL .局部变量 db, 整数型 .局部变量 num, 整数型 .局部变量 i, 整数型 .如果 (_libmySQL.connect (“localhost”, “root”, “root”, “mysql”, 3306) 且 _libmySQL.is ()) _libmySQL.character (“set names utf8”) _libmySQL.query (“select * from user”) db = _libmySQL.store_result () num = _libmySQL.num_rows (db) .变量循环首 (1, num, 1, i) 调试输出 (到文本 (_libmySQL.readByte (db, “Host”))) _libmySQL.fetch_row (db) .变量循环尾 () _libmySQL.free_result (db) .否则 .如果结束
分类
网络相关源码

多版本多项目 更新 支持zip 执行 单个文件管理类型 版本滚回

多版本多项目 更新 支持zip 执行 单个文件管理类型 版本滚回

多版本多项目 更新 支持zip 执行 单个文件管理类型

自动备份

zip解压

文件删除

版本滚回

多版本多项目 更新 支持zip 执行 单个文件管理类型 版本滚回.png

分类
易语言例程

使用易语言核心命令做验证码输入框

使用易语言核心命令做验证码输入框, 非易语言窗口组建

分类
易语言例程

易语言灵活的调用扩展方法

易语言灵活的调用扩展方法

.版本 2 .支持库 spec .子程序 _临时子程序 .局部变量 Script, Script .局部变量 _Pack, _Pack .局部变量 return, 整数型 ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。 ' 绑定方法 Script.bindFun (“login”, 到整数 (&login)) ' 声明数据 _Pack.setStr (“username”) _Pack.setStr (“password”) ' 调用方法 return = Script.callFun (“login”, _Pack.gethandle ()) _Pack.sethandle (return) .判断开始 (_Pack.GetInt () = 1) 调试输出 (_Pack.getStr ()) .默认 调试输出 (_Pack.getStr ())
分类
易语言模块源码

系统服务模块易语言源码

系统服务模块易语言源码

.版本 2 .程序集 Service .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码 _临时子程序 () ' 在初始化代码执行完毕后调用测试代码 返回 (0) ' 可以根据您的需要返回任意数值 .子程序 _临时子程序 .局部变量 FileList, FileList, , "0" .局部变量 Num, 整数型 .局部变量 i, 整数型 ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。 Num = ScanPath (“D:\KuGou”, FileList) .计次循环首 (Num, i) ' 调试输出 (FileList [i].FilePath, FileList [i].FileName) .计次循环尾 () .子程序 ScanPath, 整数型, 公开 .参数 directory, 文本型 .参数 FileList, FileList, 数组 .参数 Folder, 文本型, 可空 .局部变量 FolderName, 文本型 .局部变量 FileName, 文本型 .局部变量 hFile, FileList .如果真 (取文本右边 (directory, 1) = “\”) directory = 取文本左边 (directory, 取文本长度 (directory) - 1) .如果真结束 .如果真 (取文本右边 (Folder, 1) ≠ “\”) Folder = Folder + “\” .如果真结束 FileName = 寻找文件 (directory + Folder + “*.*”, ) .判断循环首 (FileName ≠ “”) .如果真 (FileName ≠ “.” 且 FileName ≠ “..”) hFile.Path = directory hFile.FilePath = Folder hFile.FileName = FileName hFile.FileType = 0 加入成员 (FileList, hFile) .如果真结束 FileName = 寻找文件 (, ) .判断循环尾 () FolderName = 寻找文件 (directory + Folder + “*.*”, #子目录 + #隐藏文件) .判断循环首 (FolderName ≠ “”) .如果真 (FolderName ≠ “.” 且 FolderName ≠ “..”) hFile.Path = directory hFile.FilePath = Folder + FolderName + “\” hFile.FileName = 字符 (0) hFile.FileType = 1 加入成员 (FileList, hFile) ScanPath (directory, FileList, Folder + FolderName) .如果真结束 FolderName = 寻找文件 (, #子目录 + #隐藏文件) .判断循环尾 () 返回 (取数组成员数 (FileList)) .子程序 _ServiceCreate, 逻辑型, 公开 .参数 lpServiceName, 文本型 .参数 lpBinaryPathName, 文本型 .参数 dwStartType, 整数型, 可空, . .局部变量 hSCManager, 整数型 .局部变量 hService, 整数型 hSCManager = OpenSCManager (0, 0, 983103) .如果真 (hSCManager ≠ 0) dwStartType = 选择 (是否为空 (dwStartType), 3, dwStartType) hService = CreateService (hSCManager, lpServiceName, lpServiceName, 983103, 32, dwStartType, 1, lpBinaryPathName, 0, 0, 0, 0, 0) CloseServiceHandle (hService) .如果真结束 CloseServiceHandle (hSCManager) 返回 (hService ≠ 0) .子程序 _ServiceDelete, 逻辑型, 公开 .参数 lpServiceName, 文本型 .局部变量 hSCManager, 整数型 .局部变量 hService, 整数型 .局部变量 Status, SERVICE_STATUS .局部变量 Code, 整数型 hSCManager = OpenSCManager (0, 0, 983103) .如果真 (hSCManager ≠ 0) hService = OpenService (hSCManager, lpServiceName, 65536) .如果真 (hService ≠ 0) Code = DeleteService (hService) CloseServiceHandle (hService) .如果真结束 .如果真结束 CloseServiceHandle (hSCManager) 返回 (Code = 1) .子程序 _QueryServiceStatus, 整数型, 公开 .参数 lpServiceName, 文本型 .局部变量 hSCManager, 整数型 .局部变量 hService, 整数型 .局部变量 Status, SERVICE_STATUS .局部变量 CurrentState, 整数型 hSCManager = OpenSCManager (0, 0, 983101) .如果真 (hSCManager ≠ 0) hService = OpenService (hSCManager, lpServiceName, 983551) .判断开始 (hService ≠ 0) .判断开始 (QueryServiceStatus (hService, Status)) CurrentState = Status.dwCurrentState .默认 CloseServiceHandle (hService) .判断结束 .默认 CloseServiceHandle (hSCManager) .判断结束 .如果真结束 返回 (CurrentState) .子程序 _ServiceStart, 逻辑型, 公开 .参数 lpServiceName, 文本型 .局部变量 hSCManager, 整数型 .局部变量 hService, 整数型 .局部变量 Code, 整数型 hSCManager = OpenSCManager (0, 0, 983103) .如果真 (hSCManager ≠ 0) hService = OpenService (hSCManager, lpServiceName, 16) .如果真 (hService ≠ 0) Code = StartService (hService, 0, 0) CloseServiceHandle (hService) .如果真结束 .如果真结束 CloseServiceHandle (hSCManager) 返回 (Code ≠ 0) .子程序 _ServiceStop, 逻辑型, 公开 .参数 lpServiceName, 文本型 .局部变量 hSCManager, 整数型 .局部变量 hService, 整数型 .局部变量 Status, SERVICE_STATUS .局部变量 Code, 整数型 hSCManager = OpenSCManager (0, 0, 1) .如果真 (hSCManager ≠ 0) hService = OpenService (hSCManager, lpServiceName, 32) .如果真 (hSCManager ≠ 0) Code = ControlService (hService, 1, Status) CloseServiceHandle (hService) .如果真结束 .如果真结束 CloseServiceHandle (hSCManager) 返回 (Code ≠ 0) .子程序 ServiceStart, 逻辑型, 公开 .参数 lpServiceName, 文本型 .局部变量 Code, 整数型 .判断循环首 (_QueryServiceStatus (lpServiceName) = 3) 处理事件 () .判断循环尾 () _ServiceStart (lpServiceName) .判断循环首 (_QueryServiceStatus (lpServiceName) = 2) Code = _QueryServiceStatus (lpServiceName) .如果真 (Code = 4 或 Code = 1) 跳出循环 () .如果真结束 处理事件 () .判断循环尾 () 返回 (_QueryServiceStatus (lpServiceName) = 4) .子程序 ServiceStop, 逻辑型, 公开 .参数 lpServiceName, 文本型 .局部变量 Code, 整数型 .判断循环首 (_QueryServiceStatus (lpServiceName) = 2) 处理事件 () .判断循环尾 () _ServiceStop (lpServiceName) .判断循环首 (_QueryServiceStatus (lpServiceName) = 3) Code = _QueryServiceStatus (lpServiceName) .如果真 (Code = 1 或 Code = 4) 跳出循环 () .如果真结束 处理事件 () .判断循环尾 () 返回 (_QueryServiceStatus (lpServiceName) = 1)
分类
易语言例程

易语言类引用源码 可跨DLL

.版本 2 .支持库 spec .支持库 EThread .程序集 WinMain .子程序 _WinMain_创建完毕 .子程序 Base .参数 _this, 整数型 .局部变量 Copy, Copy .局部变量 Base, Base .局部变量 Msg, 文本型 Copy.Copy (Base, _this) Base.Login (“username”, “www.hunankuai.com”, Msg) 调试输出 (Base.getToken ()) .子程序 demo .局部变量 hendle, 整数型 .局部变量 i, 整数型 .局部变量 addr, 整数型 .局部变量 论坛, 易语言论坛, , "1" .局部变量 快站, 湖南快站, , "1" .局部变量 Copy, Copy .计次循环首 (取数组成员数 (论坛), i) 启动线程 (&Base, Copy.getFunc (论坛 [i]), hendle) 等待线程 (hendle, 1000) ' 信息框 (“Token:” + 论坛 [i].getToken (), 0, , WinMain) .计次循环尾 () .计次循环首 (取数组成员数 (快站), i) 启动线程 (&Base, Copy.getFunc (快站 [i]), hendle) 等待线程 (hendle, 1000) ' 信息框 (“Token:” + 论坛 [i].getToken (), 0, , WinMain) .计次循环尾 () .子程序 _按钮1_被单击 demo ()
分类
易语言模块源码

HPSocket 同步发送 异步 sqllite模块源码

.版本 2 .支持库 spec .程序集 程序集1 .子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行 .局部变量 connect, _SqliteConnect .局部变量 tables, 文本型, , "0" .局部变量 fields, 文本型, , "0" .局部变量 i, 整数型 .局部变量 dbRes, _SqliteRecordSet .局部变量 isql, 文本型 ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。 调试输出 (connect.GetVersion ()) 调试输出 (connect.GetError ()) 调试输出 (connect.Open (取运行目录 () + “\db.db”, , )) ' 调试输出 (connect.IsOpen ()) ' 调试输出 (connect.IsTableExist (“USER”)) 调试输出 (connect.GetTables (tables)) .计次循环首 (取数组成员数 (tables), i) 调试输出 (tables [i]) .计次循环尾 () ' 调试输出 (connect.GetFields (“USER”, fields)) ' ' 调试输出 (fields [i]) ' 计次循环尾 () ' ' isql = SqlFormat (“insert into USER values({0},'{1}','{2}')”, 到文本 (取随机数 (1, 9999)), “test123”, “易语言”, , , , , , , ) ' 调试输出 (connect.Exec (isql), connect.GetChangeCount ()) ' 计次循环尾 () dbRes.SetDB (connect.GetHandle ()) 调试输出 (dbRes.Query (“SELECT ID,USERNAME,PASSWORD,STATE FROM USERS;”), dbRes.GetRowCount ()) .循环判断首 () 调试输出 (dbRes.ReadString (0), dbRes.ReadString (1), dbRes.ReadString (2)) .循环判断尾 (dbRes.Next ()) dbRes.Close () 调试输出 (connect.Close ()) 返回 (0) ' 可以根据您的需要返回任意数值
分类
易语言模块源码

miniblink浏览器模块(含源码)18-08-14

miniblink是什么?

Miniblink是一个追求极致小巧的浏览器内核项目,全世界第三大流行的浏览器内核控件。

其基于chromium最新版内核,去除了chromium所有多余的部件,只保留最基本的排版引擎blink。

Miniblink保持了10M左右的极简大小,是所有同类产品最小的体积,同时支持windows xp、npapi。

为什么要做miniblink?

市面上作为嵌入的组件的可用的浏览器内核,不外乎这几个:webkit、cef、nwjs、electron。

cef:优点是由于集成的chromium内核,所以对H5支持的很全,同时因为使用的人也多,各种教程、示例,资源很多。但缺点很明显,太大了。最新的cef已经夸张到了100多M,还要带一堆的文件。同时新的cef已经不支持xp了(chromium对应版本是M49)。而且由于是多进程架构,对资源的消耗也很夸张。如果只是想做个小软件,一坨文件需要带上、超大的安装包,显然不能忍受。

nwjs,或者最近大火的electron:和cef内核类似,都是chromium内核。缺点和cef一模一样。优点是由于可以使用nodejs的资源,同时又自带了各种api的绑定,所以可以用的周边资源非常丰富;而基于js的开发方案,使得前端很容易上手。所以最近N多项目都是基于nwjs或electron来实现。例如vscode,atom等等。

原版webkit:现在官网还在更新windows port,但显然漫不在心,而且最新的webkit也很大了,超过20几M。最关键的是,周边资源很少,几乎没人再基于webkit来做开发。同时由于windows版的saferi已经停止开发了,所以用webkit就用不了他的dev tools了。这是个大遗憾。

WKE:这是个很老的webkit内核的裁剪版了。小是小,但bug太多了。

那么关键点来了,使用miniblink有啥好处呢??

首先,miniblink对大小要求非常严格。原版chromium、blink里对排版渲染没啥大用的如音视频全都被砍了,只专注于网页的排版和渲染。甚至为了裁剪大小,我不惜使用vc6的crt来跑mininblink(见我上篇文章)。这个也算前无古人后无来者了。

其次,miniblink紧跟最新chromium,这意味着chromium相关的资源都可以利用。在未来的规划里,我是打算把electron的接口也加上的,这样可以无缝替换electron。使用miniblink的话,开发调试时用原版electron,发布的时候再替换掉那些dll,直接可以无缝切换,非常方便。

miniblink如何使用?

Miniblink导出了electron、WKE的接口,可以直接无缝替换现有的electron、WKE项目。

早期miniblink还导出了CEF接口,不过现在已被废弃。

miniblink有个小demo,从demo里可以看到,brackct这个基于cef的开源编辑器,已经顺利由miniblink跑起来了。现在electron的接口已做好,vscode跑起来了。

更详细的使用文档见本页其他文章。

miniblink如何裁剪到这么小?

这个比较复杂了。主要就是把blink从chromium抽离了出来,同时补上了cc层(硬件渲染层)。现在的blink,已经不是当年的那个webkit了,渲染部分全走cc层,复杂无比。我这大半年都在重写他那个蛋疼又复杂的cc层。

和webkit比,miniblink架构有什么优势

现在的webkit版本,已经比miniblink落后太多了。blink一直在加入各种极富创造力和想象力的功能、组件。例如,blink早就加入多线程解析html token、blink gc回收器、多线程录制回放渲染机制。这些能让blink的解析渲染速度极大提升。下一次,我会先开源出blink gc组件,这东西很有意思,在c++里硬是搞出了一个垃圾回收机制,能让你像写java一样写c++。