服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - 易语言 - 易语言实现截图或右键二维码识别的代码

易语言实现截图或右键二维码识别的代码

2022-02-16 17:08易语言源码贝贝吧 易语言

今天小编就为大家分享一篇关于易语言实现截图或右键二维码识别的代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

DLL命令表

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
.版本 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倍以上

自定义数据类型

?
1
2
3
.版本 2
.数据类型 程序延时
  .成员 成员_时间, 长整数型, , , 占用8个字节

全局变量表

?
1
2
3
4
5
6
7
8
9
10
11
.版本 2
.支持库 BmpOperate
.全局变量 a, 字节集
.全局变量 x
.全局变量 y
.全局变量 s, 逻辑型
.全局变量 动画物体1
.全局变量 动画物体2
.全局变量 w, 位图
.全局变量 w1, 位图
.全局变量 解码结果, 文本型

常量数据表

?
1
2
3
4
5
6
7
8
9
.版本 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"”"

截图程序集的代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
.版本 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.取位图数据 (), )
.如果真结束

解码程序集的代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
.版本 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)
  处理事件 ()
.如果真结束

二维码识别的代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
.版本 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\”))
  注册右键按钮.标题 = “注销右键”
.否则
  注册右键按钮.标题 = “注册右键”
.如果结束

运行结果:

易语言实现截图或右键二维码识别的代码

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接

延伸 · 阅读

精彩推荐
  • 易语言易语言获取指定磁盘的名称

    易语言获取指定磁盘的名称

    今天小编就为大家分享一篇关于易语言获取指定磁盘的名称,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来...

    易语言帮助手册12662022-01-04
  • 易语言易语言在画板中写出指定文本当画板中已满会自动滚屏

    易语言在画板中写出指定文本当画板中已满会自动滚屏

    今天小编就为大家分享一篇关于易语言在画板中写出指定文本当画板中已满会自动滚屏,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,...

    易语言帮助手册9092022-01-12
  • 易语言易语言关于程序进程和线程的基础知识

    易语言关于程序进程和线程的基础知识

    今天小编就为大家分享一篇关于易语言关于程序进程和线程的基础知识,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    三叶资源网6662022-02-24
  • 易语言一步一步跟我学易语言之关于变量

    一步一步跟我学易语言之关于变量

    今天小编就为大家分享一篇关于一步一步跟我学易语言之关于变量,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随...

    易语言帮助手册10822021-06-17
  • 易语言易语言设置进度条边框样式的方法

    易语言设置进度条边框样式的方法

    今天小编就为大家分享一篇关于易语言设置进度条边框样式的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随...

    易语言帮助手册4422022-01-20
  • 易语言一步一步跟我学易语言之第二个易程序菜单设计

    一步一步跟我学易语言之第二个易程序菜单设计

    今天小编就为大家分享一篇关于的一步一步跟我学易语言之第二个易程序菜单设计,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要...

    易语言帮助手册7092021-06-17
  • 易语言实例操作易语言载入窗口

    实例操作易语言载入窗口

    在本文中小编给大家整理的是关于易语言载入窗口的教程和步骤内容,需要的可以跟着学习下...

    易语言教程网19162022-03-02
  • 易语言易语言生成exe文件的方法

    易语言生成exe文件的方法

    在本篇内容中小编给大家分享的是关于易语言生成exe文件的方法知识点,需要的朋友们参考下。...

    易语言教程网14792022-03-01