易语言实现截图或右键二维码识别的代码
DLL命令表
.版本 2 .DLL命令 DecodePictureFile, 整数型, "PsyQrDcd", "DecodePictureFile" .参数 strFilePath, 文本型 .DLL命令 DecodePictureFileRect, 整数型, "PsyQrDcd", "DecodePictureFileRect" .参数 strFilePath, 文本型 .参数 lngLeftX, 整数型 .参数 lngTopY, 整数型 .参数 lngRightX, 整数型 .参数 lngBottomY, 整数型 .DLL命令 DecodeGrayScaleArray, 整数型, "PsyQrDcd", "DecodeGrayScaleArray" .参数 byData, 字节型, 传址 .参数 lngWidth, 整数型 .参数 lngHeight, 整数型 .DLL命令 DecodeBinaryArray, 整数型, "PsyQrDcd", "DecodeBinaryArray" .参数 byData, 字节型, 传址 .参数 lngWidth, 整数型 .参数 lngHeight, 整数型 .DLL命令 GetDecodeDataString, 文本型, "PsyQrDcd", "GetDecodeDataString" .参数 lngIndex, 整数型 .DLL命令 GetDecodeDataByteArray, 整数型, "PsyQrDcd", "GetDecodeDataByteArray" .参数 lngIndex, 整数型 .DLL命令 GetDecodeVersion, 整数型, "PsyQrDcd", "GetDecodeVersion" .参数 lngIndex, 整数型 .DLL命令 GetDecodeLevel, 整数型, "PsyQrDcd", "GetDecodeLevel" .参数 lngIndex, 整数型 .DLL命令 GetDecodeMaskingNo, 整数型, "PsyQrDcd", "GetDecodeMaskingNo" .参数 lngIndex, 整数型 .DLL命令 GetConcatenationInfo, 整数型, "PsyQrDcd", "GetConcatenationInfo" .参数 lngIndex, 整数型 .参数 lngSeqNo, 整数型, 传址 .参数 byCheckDigit, 字节型, 传址 .DLL命令 GetSymbolePosition, 整数型, "PsyQrDcd", "GetSymbolePosition" .参数 lngIndex, 整数型 .参数 lngPosition, 整数型, 传址 .DLL命令 SetDecodeSymbolCount, , "PsyQrDcd", "SetDecodeSymbolCount" .参数 lngCount, 整数型 .DLL命令 SetDecodeEffectLevel, , "PsyQrDcd", "SetDecodeEffectLevel" .参数 lngLevel, 整数型 .DLL命令 SetBrightnessBorder, , "PsyQrDcd", "SetBrightnessBorder" .参数 byBorder, 字节型 .DLL命令 SetMinimumModuleSize, , "PsyQrDcd", "SetMinimumModuleSize" .参数 bySize, 字节型 .DLL命令 FreeAllocateMemory, , "PsyQrDcd", "FreeAllocateMemory" .DLL命令 API_MultiByteToWideChar_utf8, 整数型, , "MultiByteToWideChar" .参数 CodePage, 整数型 .参数 dwFlags, 整数型 .参数 lpMultiByteStr, 字节集 .参数 cchMultiByte, 整数型 .参数 lpWideCharStr, 字节集 .参数 cchWideChar, 整数型 .DLL命令 API_WideCharToMultiByte_utf8, 整数型, "kernel32", "WideCharToMultiByte", , 将通配符映像为多字节 .参数 CodePage, 整数型 .参数 dwFlags, 整数型 .参数 lpWideCharStr, 字节集 .参数 cchWideChar, 整数型 .参数 lpMultiByteStr, 字节集 .参数 cchMultiByte, 整数型 .参数 lpDefaultChar, 整数型 .参数 lpUsedDefaultChar, 整数型 .DLL命令 API_WideCharToMultiByte, 整数型, "kernel32", "WideCharToMultiByte", , 将通配符映像为多字节 .参数 CodePage, 整数型 .参数 dwFlags, 整数型 .参数 lpWideCharStr, 字节集 .参数 cchWideChar, 整数型 .参数 lpMultiByteStr, 文本型 .参数 cchMultiByte, 整数型 .参数 lpDefaultChar, 文本型 .参数 lpUsedDefaultChar, 整数型 .DLL命令 CreateWaitableTimerA, 整数型, , "CreateWaitableTimerA", 公开, CreateWaitableTimerA 程序延时 .参数 lpTimerAttributes, 整数型 .参数 bManualReset, 逻辑型 .参数 lpTimerName, 整数型 .DLL命令 SetWaitableTimer, 整数型, , "SetWaitableTimer", 公开, SetWaitableTimer .参数 hTimer, 整数型 .参数 pDueTime, 程序延时 .参数 lPeriod, 整数型 .参数 pfnCompletionRoutine, 整数型 .参数 lpArgToCompletionRoutine, 整数型 .参数 fResume, 逻辑型 .DLL命令 MsgWaitForMultipleObjects, 整数型, , "MsgWaitForMultipleObjects", 公开, MsgWaitForMultipleObjects .参数 nCount, 整数型 .参数 pHandles, 整数型, 传址 .参数 fWaitAll, 逻辑型 .参数 dwMilliseconds, 整数型 .参数 dwWakeMask, 整数型 .DLL命令 CloseHandle, 逻辑型, "kernel32", "CloseHandle", 公开, CloseHandle关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的 非零表示成功,零表示失败。会设置GetLastError .参数 对象句柄, 整数型, , 欲关闭的一个对象的句柄; .DLL命令 GetInputState, 整数型, "user32", "GetInputState", 公开, 用法,如果真(我的处理事件()≠0),处理事件() 比系统自带的"处理事件"比3倍以上
自定义数据类型
.版本 2 .数据类型 程序延时 .成员 成员_时间, 长整数型, , , 占用8个字节
全局变量表
.版本 2 .支持库 BmpOperate .全局变量 a, 字节集 .全局变量 x .全局变量 y .全局变量 s, 逻辑型 .全局变量 动画物体1 .全局变量 动画物体2 .全局变量 w, 位图 .全局变量 w1, 位图 .全局变量 解码结果, 文本型
常量数据表
.版本 2 .常量 QRD_ERROR_SYMBLE_NOT_FOUND, "0" .常量 QRD_ERROR_FILE_NOT_FOUND, "-1" .常量 QRD_ERROR_READ_FAULT, "-2" .常量 QRD_ERROR_BAD_FORMAT, "-3" .常量 QRD_ERROR_SHARING_VIOLATION, "-4" .常量 QRD_ERROR_NOT_ENOUGH_MEMORY, "-5" .常量 常量1 .常量 常量2, "“"C:\Users\Administrator\Desktop\二维码读取\qrcode.exe" "%1"”"
截图程序集的代码
.版本 2 .支持库 iext2 .支持库 BmpOperate .支持库 exui .程序集 截图窗口程序集 .子程序 _截图窗口_创建完毕 截图动画物体.趋向色 = #灰色 截图动画物体.趋向程度 = 50 动画物体1 = 背景动画框.创建物体 (截图动画物体, 0, 0, 真, ) 动画物体2 = 背景动画框.创建物体 (动画物体2, 0, 0, 真, ) a = 快照 (, , ) 背景动画框.置图片 (动画物体1, a, ) w.载入数据 (a) 截图窗口.移动 (0, 0, 取屏幕宽度 (), 取屏幕高度 ()) 背景动画框.移动 (0, 0, 截图窗口.宽度, 截图窗口.高度) 截图窗口.可视 = 真 .子程序 _背景动画框_鼠标左键被按下, 逻辑型 .参数 横向位置, 整数型 .参数 纵向位置, 整数型 .参数 功能键状态, 整数型 s = 真 x = 横向位置 y = 纵向位置 .子程序 _背景动画框_鼠标左键被放开, 逻辑型 .参数 横向位置, 整数型 .参数 纵向位置, 整数型 .参数 功能键状态, 整数型 s = 假 .如果真 (写到文件 (取运行目录 () + “\2wm.bmp”, w1.取位图数据 ())) 截图窗口.可视 = 假 解码结果 = 解码 (取运行目录 () + “\2wm.bmp”) _启动窗口.主窗口.可视EX = 真 _启动窗口.激活 () 显示信息 (解码结果) .如果真结束 销毁 () .子程序 _背景动画框_鼠标位置被移动, 逻辑型 .参数 横向位置, 整数型 .参数 纵向位置, 整数型 .参数 功能键状态, 整数型 .局部变量 x1 .局部变量 y1 .局部变量 c, 整数型 .如果真 (s) x1 = 横向位置 - x y1 = 纵向位置 - y .如果真 (x1 < 1) x1 = 0 .如果真结束 .如果真 (y1 < 1) y1 = 0 .如果真结束 w1.创建 (x1, y1, 24, #白色) w.复制到 (x, y, x1, y1, w1, 0, 0, ) .计次循环首 (x1, c) w1.置某点颜色 (c, 0, #红色) w1.置某点颜色 (c, y1 - 1, #红色) .计次循环尾 () .计次循环首 (y1, c) w1.置某点颜色 (0, c, #红色) w1.置某点颜色 (x1 - 1, c, #红色) .计次循环尾 () 背景动画框.置物体位置 (动画物体2, x, y, ) 背景动画框.置图片 (动画物体2, w1.取位图数据 (), ) .如果真结束
解码程序集的代码
.版本 2 .支持库 spec .程序集 解码程序集 .程序集变量 lngRectLeft, 整数型 .程序集变量 lngRectTop, 整数型 .程序集变量 lngRectRight, 整数型 .程序集变量 lngRectBottom, 整数型 .程序集变量 blnEnableSetRect, 逻辑型 .子程序 解码, 文本型 .参数 strFilePath, 文本型 .局部变量 intOldPointer, 整数型 .局部变量 lngResult, 整数型 .局部变量 strResult, 文本型 .局部变量 i, 整数型 .局部变量 lngCount, 整数型 .局部变量 lngSeqNo, 整数型 .局部变量 byCheckDigit, 字节型 .局部变量 lngPosition, 整数型, , "8" .如果 (blnEnableSetRect) lngResult = DecodePictureFileRect (strFilePath, lngRectLeft, lngRectTop, lngRectRight, lngRectBottom) .否则 lngResult = DecodePictureFile (strFilePath) .如果结束 .如果 (lngResult ≥ 1) .变量循环首 (0, lngResult - 1, 1, i) strResult = strResult + “——————————————————————” + #换行符 strResult = strResult + “已解码数据 ” + 到文本 (i + 1) strResult = strResult + “ [模型版本: ” + 到文本 (GetDecodeVersion (i)) strResult = strResult + “, 等级: ” .判断开始 (GetDecodeLevel (i) = 0) strResult = strResult + “L(7%)” .判断 (GetDecodeLevel (i) = 1) strResult = strResult + “M(15%)” .判断 (GetDecodeLevel (i) = 2) strResult = strResult + “Q(25%)” .判断 (GetDecodeLevel (i) = 3) strResult = strResult + “H(30%)” .默认 .判断结束 lngCount = GetConcatenationInfo (i, lngSeqNo, byCheckDigit) .如果真 (lngCount > 0) strResult = strResult + “, 综合:” + 到文本 (lngSeqNo + 1) + “/” + 到文本 (lngCount) strResult = strResult + “(CD” + 取十六进制文本 (byCheckDigit \ 16) + 取十六进制文本 (byCheckDigit % 16) + “H)” .如果真结束 strResult = strResult + “]” + #换行符 strResult = strResult + “——————————————————————” + #换行符 调试输出 (UTF8_转_ANSI (到字节集 (GetDecodeDataString (i)))) strResult = strResult + UTF8_转_ANSI (到字节集 (GetDecodeDataString (i))) + #换行符 + #换行符 lngResult = GetSymbolePosition (i, lngPosition [1]) strResult = strResult + “符号位置:” + “(” + 到文本 (lngPosition [1]) + “, ” + 到文本 (lngPosition [2]) + “)-” + “(” + 到文本 (lngPosition [3]) + “, ” + 到文本 (lngPosition [4]) + “)-” + “(” + 到文本 (lngPosition [5]) + “, ” + 到文本 (lngPosition [6]) + “)-” + “(” + 到文本 (lngPosition [7]) + “, ” + 到文本 (lngPosition [8]) + “)” strResult = strResult + #换行符 + #换行符 .变量循环尾 () FreeAllocateMemory () .否则 .判断开始 (lngResult = #QRD_ERROR_SYMBLE_NOT_FOUND) strResult = “未找到 QR 代码符号。” .判断 (lngResult = #QRD_ERROR_FILE_NOT_FOUND) strResult = “文件未找到!” .判断 (lngResult = #QRD_ERROR_READ_FAULT) strResult = “读取文件时发生错误。” .判断 (lngResult = #QRD_ERROR_BAD_FORMAT) strResult = “无法读取此格式文件。” .判断 (lngResult = #QRD_ERROR_SHARING_VIOLATION) strResult = “共享冲突,无法读取文件。” .判断 (lngResult = #QRD_ERROR_NOT_ENOUGH_MEMORY) strResult = “内存不足。” .默认 .判断结束 .如果结束 调试输出 (strResult) 返回 (strResult) .子程序 UTF8_转_ANSI, 文本型, 公开 .参数 utf8字节集, 字节集 返回 (Unicode_转_ANSI (UTF8_转_Unicode (utf8字节集))) .子程序 UTF8_转_Unicode, 字节集 .参数 utf8字节集, 字节集 .局部变量 len, 整数型, , , 单位: Word .局部变量 Unicode字节集, 字节集 .局部变量 ll ll = 取字节集长度 (utf8字节集) len = API_MultiByteToWideChar_utf8 (65001, 0, utf8字节集, ll, { }, 0) Unicode字节集 = 取空白字节集 (len × 2) API_MultiByteToWideChar_utf8 (65001, 0, utf8字节集, ll, Unicode字节集, len × 2) 返回 (Unicode字节集) .子程序 Unicode_转_ANSI, 文本型 .参数 Unicode字节集, 字节集 .局部变量 ansi_len, 整数型, , , 单位: Word .局部变量 unicode_len .局部变量 ansi, 文本型 unicode_len = 取字节集长度 (Unicode字节集) ÷ 2 ansi_len = API_WideCharToMultiByte (936, 0, Unicode字节集, unicode_len, ansi, 0, “”, 0) ansi = 取空白文本 (ansi_len) API_WideCharToMultiByte (936, 0, Unicode字节集, unicode_len, ansi, ansi_len, “”, 0) 返回 (ansi) .子程序 程序延时, 逻辑型, , 不占用cpu,窗口不卡死,不影响其它代码执行 .参数 参_延时间隔, 整数型, 可空, 1000毫秒 = 1秒 留空为无限等待 .参数 参_延时单位, 整数型, 可空, 默认为毫秒 0=毫秒 1=秒 2=分钟 3=小时 .局部变量 局_时间句柄, 整数型 .局部变量 局_时间, 程序延时 .判断开始 (参_延时单位 = 0 且 是否为空 (参_延时间隔)) 参_延时间隔 = 5000 × 60 × 60 参_延时单位 = 5000 × 60 × 60 .判断 (参_延时单位 = 0) 参_延时单位 = 1 .判断 (参_延时单位 = 1) 参_延时单位 = 1000 .判断 (参_延时单位 = 2) 参_延时单位 = 1000 × 60 .判断 (参_延时单位 = 3) 参_延时单位 = 1000 × 60 × 60 .默认 .判断结束 局_时间.成员_时间 = -10 × 参_延时间隔 × 1000 × 参_延时单位 局_时间句柄 = CreateWaitableTimerA (0, 假, 0) SetWaitableTimer (局_时间句柄, 局_时间, 0, 0, 0, 假) .判断循环首 (MsgWaitForMultipleObjects (1, 局_时间句柄, 假, -1, 255) ≠ 0) 系统处理事件 () .判断循环尾 () CloseHandle (局_时间句柄) 返回 (真) .子程序 系统处理事件 .如果真 (GetInputState () ≠ 0) 处理事件 () .如果真结束
二维码识别的代码
.版本 2 .支持库 exui .支持库 iext2 .程序集 启动窗口程序集 .程序集变量 命令行, 文本型, , "0" .子程序 __启动窗口_创建完毕 .局部变量 path, 文本型 path = 取运行目录 () + “\PsyQrDcd.dll” .如果真 (文件是否存在 (path) = 假) 写到文件 (path, #PsyQrDcd) .如果真结束 取命令行 (命令行) .如果真 (取数组成员数 (命令行) > 0) 解码结果 = 解码 (命令行 [1]) 显示信息 (解码结果) .如果真结束 初始化注册右键按钮 () .子程序 _截图识别按钮_左键单击 主窗口.可视EX = 假 .如果真 (是否已创建 (截图窗口) = 假) 载入 (截图窗口, , 假) .如果真结束 截图窗口.背景动画框.置物体位置 (动画物体2, -2000, -2000, ) .子程序 _注册右键按钮_左键单击 .如果 (注册项是否存在 (#根类, “*\shell\QRCode\command\”)) 删除注册项 (#根类, “*\shell\QRCode\command”) 删除注册项 (#根类, “*\shell\QRCode”) .否则 .如果 (写注册项 (#根类, “*\shell\QRCode\”, “识别二维码”) 且 写注册项 (#根类, “*\shell\QRCode\command\”, 取运行目录 () + “\” + 取执行文件名 () + “ %1”)) 显示信息 (“注册成功”) .否则 显示信息 (“注册失败”) 删除注册项 (#根类, “*\shell\QRCode\command”) 删除注册项 (#根类, “*\shell\QRCode”) .如果结束 .如果结束 初始化注册右键按钮 () .子程序 显示信息 .参数 信息, 文本型 .参数 是否复制, 逻辑型, 可空 信息框EX (主窗口.图标, “解码结果 - 已复制到剪辑版”, , 信息, , { “确认” }, 0, 取窗口句柄 (), , , 5000, , ) .如果真 (是否复制) 置剪辑板文本 (解码结果) .如果真结束 .子程序 __启动窗口_将被销毁 主窗口.销毁 () .子程序 初始化注册右键按钮 .如果 (注册项是否存在 (#根类, “*\shell\QRCode\command\”)) 注册右键按钮.标题 = “注销右键” .否则 注册右键按钮.标题 = “注册右键” .如果结束
运行结果:
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
赞 (0)