易语言修改软件版权信息的工具

时间:2022-06-01 22:00:49

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
.版本 2
.DLL命令 BeginUpdateResource, 整数型, , "BeginUpdateResourceA"
  .参数 pFileName, 文本型
  .参数 bDeleteExistingResources, 逻辑型
.DLL命令 EndUpdateResource, 逻辑型, , "EndUpdateResourceA"
  .参数 hUpdate, 整数型
  .参数 fDiscard, 逻辑型
.DLL命令 UpdateResource, 逻辑型, , "UpdateResourceA"
  .参数 hUpdate, 整数型
  .参数 lpType, 整数型
  .参数 lpName, 整数型
  .参数 wLanguage, 整数型
  .参数 lpData, 字节集
  .参数 cbData, 整数型
.DLL命令 CopyMemory_vf, , , "RtlMoveMemory"
  .参数 Destination, 字节集
  .参数 Source, VS_FIXEDFILEINFO
  .参数 cbCopy, 整数型
.DLL命令 MultiByteToWideChar, 整数型, , "MultiByteToWideChar"
  .参数 CodePage, 整数型
  .参数 dwFlags, 整数型
  .参数 lpMultiByteStr, 文本型
  .参数 cchMultiByte, 整数型
  .参数 lpWideCharStr, 字节集
  .参数 cchWideChar, 整数型

常量数据表

?
1
2
.版本 2
.常量 版本信息, "<文本长度: 537>"

自定义数据类型表

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
.版本 2
.数据类型 VS_FIXEDFILEINFO
  .成员 dwSignature, 整数型
  .成员 dwStrucVersion, 整数型
  .成员 dwFileVersionMS, 整数型
  .成员 dwFileVersionLS, 整数型
  .成员 dwProductVersionMS, 整数型
  .成员 dwProductVersionLS, 整数型
  .成员 dwFileFlagsMask, 整数型
  .成员 dwFileFlags, 整数型
  .成员 dwFileOS, 整数型
  .成员 dwFileType, 整数型
  .成员 dwFileSubtype, 整数型
  .成员 dwFileDateMS, 整数型
  .成员 dwFileDateLS, 整数型
.数据类型 版权信息型, 公开
  .成员 公司, 文本型
  .成员 描述, 文本型
  .成员 文件版本, 文本型
  .成员 内部名称, 文本型
  .成员 版权, 文本型
  .成员 源文件名, 文本型
  .成员 产品名称, 文本型
  .成员 产品版本, 文本型

修改EXE属性版权信息

?
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
.版本 2
.支持库 edroptarget
.程序集 窗口程序集1
.子程序 修改版权信息, , 公开, 修改指定EXE文件版权信息
.参数 文件名, 文本型
.参数 版本信息, 版权信息型
.局部变量 更新句柄, 整数型
.局部变量 版本信息数据, 字节集
.局部变量 文件数据, 字节集
.局部变量 检查后文件数据, 字节集
.局部变量 尾部数据, 字节集
.局部变量 版本信息内容, 文本型
文件数据 = 读入文件 (文件名)
' 先更新一下文件,如果是独立编译的易程序,会丢失后面的数据
更新句柄 = BeginUpdateResource (文件名, 假)
EndUpdateResource (更新句柄, 假)
版本信息内容 = #版本信息
版本信息内容 = 子文本替换 (版本信息内容, “公司”, 版本信息.公司, , , 真)
版本信息内容 = 子文本替换 (版本信息内容, “描述”, 版本信息.描述, , , 真)
版本信息内容 = 子文本替换 (版本信息内容, “版权”, 版本信息.版权, , , 真)
版本信息内容 = 子文本替换 (版本信息内容, “文件版本”, 版本信息.文件版本, , , 真)
版本信息内容 = 子文本替换 (版本信息内容, “内部名称”, 版本信息.内部名称, , , 真)
版本信息内容 = 子文本替换 (版本信息内容, “源文件名”, 版本信息.源文件名, , , 真)
版本信息内容 = 子文本替换 (版本信息内容, “产品名称”, 版本信息.产品名称, , , 真)
版本信息内容 = 子文本替换 (版本信息内容, “产品版本”, 版本信息.产品版本, , , 真)
版本信息数据 = 从文本转换版本信息 (版本信息内容)
检查后文件数据 = 读入文件 (文件名)
.判断开始 (取字节集长度 (检查后文件数据) = 取字节集长度 (文件数据))
  更新句柄 = BeginUpdateResource (文件名, 假)
  UpdateResource (更新句柄, 16, 1, 2052, 版本信息数据, 取字节集长度 (版本信息数据))
  EndUpdateResource (更新句柄, 假)
.判断 (取字节集长度 (检查后文件数据) < 取字节集长度 (文件数据))
  尾部数据 = 取字节集右边 (文件数据, 取字节集长度 (文件数据) - 取字节集长度 (检查后文件数据))
  更新句柄 = BeginUpdateResource (文件名, 假)
  UpdateResource (更新句柄, 16, 1, 2052, 版本信息数据, 取字节集长度 (版本信息数据))
  EndUpdateResource (更新句柄, 假)
  写到文件 (文件名, 读入文件 (文件名) + 尾部数据)
.默认
.判断结束
.子程序 获取下一行, 逻辑型
.参数 文本, 文本型, 参考
.参数 行文本数组, 文本型, 参考 数组
.参数 索引, 整数型, 参考
.如果真 (取数组成员数 (行文本数组) ≥ 索引)
  文本 = 行文本数组 [索引]
  索引 = 索引 + 1
  返回 (真)
.如果真结束
返回 (假)
.子程序 从文本转换版本信息, 字节集
.参数 文本版本信息, 文本型
.局部变量 行_文本, 文本型
.局部变量 行_类型, 文本型
.局部变量 文本数组, 文本型, , "0"
.局部变量 位置1, 整数型
.局部变量 vf, VS_FIXEDFILEINFO
.局部变量 数据, 字节集
.局部变量 行_数组, 文本型, , "0"
.局部变量 索引, 整数型
.局部变量 字节集, 字节集
行_数组 = 分割文本 (文本版本信息, #换行符, )
索引 = 1
vf.dwSignature = -17890115
vf.dwStrucVersion = 1
vf.dwFileFlagsMask = 63
.判断循环首 (获取下一行 (行_文本, 行_数组, 索引))
  行_类型 = 获取行类型 (行_文本)
  .判断开始 (行_类型 = “FILEVERSION”)
    位置1 = 寻找文本 (行_文本, “ ”, , 假)
    文本数组 = 分割文本 (My删首尾空 (取文本右边 (行_文本, 取文本长度 (行_文本) - 位置1)), “,”, )
    .如果真 (取数组成员数 (文本数组) ≥ 4)
      vf.dwFileVersionMS = 位或 (到整数 (文本数组 [2]), 左移 (到整数 (文本数组 [1]), 16))
      vf.dwFileVersionLS = 位或 (到整数 (文本数组 [4]), 左移 (到整数 (文本数组 [3]), 16))
    .如果真结束
  .判断 (行_类型 = “PRODUCTVERSION”)
    位置1 = 寻找文本 (行_文本, “ ”, , 假)
    文本数组 = 分割文本 (My删首尾空 (取文本右边 (行_文本, 取文本长度 (行_文本) - 位置1)), “,”, )
    .如果真 (取数组成员数 (文本数组) ≥ 4)
      vf.dwProductVersionMS = 位或 (到整数 (文本数组 [2]), 左移 (到整数 (文本数组 [1]), 16))
      vf.dwProductVersionLS = 位或 (到整数 (文本数组 [4]), 左移 (到整数 (文本数组 [3]), 16))
    .如果真结束
  .判断 (行_类型 = “FILEOS”)
    位置1 = 寻找文本 (行_文本, “ ”, , 假)
    vf.dwFileOS = 十六到十 (My删首尾空 (取文本右边 (行_文本, 取文本长度 (行_文本) - 位置1)))
  .判断 (行_类型 = “FILETYPE”)
    位置1 = 寻找文本 (行_文本, “ ”, , 假)
    vf.dwFileType = 十六到十 (My删首尾空 (取文本右边 (行_文本, 取文本长度 (行_文本) - 位置1)))
  .判断 (行_类型 = “{”)
    跳出循环 ()
  .默认
  .判断结束
.判断循环尾 ()
数据 = 取空白字节集 (13 × 4)
CopyMemory_vf (数据, vf, 13 × 4)
字节集 = { 0, 0, 52, 0, 0, 0, 86, 0, 83, 0, 95, 0, 86, 0, 69, 0, 82, 0, 83, 0, 73, 0, 79, 0, 78, 0, 95, 0, 73, 0, 78, 0, 70, 0, 79, 0, 0, 0, 0, 0 } + 数据
分析BLOCK (字节集, 行_数组, 索引)
字节集 = 字节集替换 (字节集, 1, 取数据类型尺寸 (#短整数型), 到字节集 (到短整数 (取字节集长度 (字节集))))
返回 (字节集)
.子程序 分析BLOCK
.参数 字节集, 字节集
.参数 行文本数组, 文本型, 参考 数组
.参数 索引, 整数型, 参考
.局部变量 行_文本, 文本型
.局部变量 行_类型, 文本型
.局部变量 sizeaoffset, 整数型
.局部变量 a
.判断循环首 (获取下一行 (行_文本, 行文本数组, 索引))
  行_类型 = 获取行类型 (行_文本)
  .判断开始 (行_类型 = “BLOCK”)
    sizeaoffset = 取字节集长度 (字节集) + 1 ' 记录该BLOCK的起始位置
    字节集 = 字节集 + MAKEBLOCK (行_文本) ' 建立BLOCK字节集,并与之前的字节集合并
    分析BLOCK (字节集, 行文本数组, 索引)
    字节集 = 字节集替换 (字节集, sizeaoffset, 取数据类型尺寸 (#短整数型), 到字节集 (到短整数 (取字节集长度 (字节集) - sizeaoffset + 1))) ' 把字节集长度写回该BLOCK的起始位置
    a = 1
  .判断 (行_类型 = “VALUE”)
    字节集 = 字节集 + MAKEVALUE (行_文本) ' 建立VALUE字节集,并与之前的字节集合并
  .判断 (行_类型 = “}”)
    返回 ()
  .默认
  .判断结束
.判断循环尾 ()
.子程序 MAKEVALUE, 字节集
.参数 VALUE, 文本型
.局部变量 位置_左引号, 整数型
.局部变量 位置_右引号, 整数型
.局部变量 位置_逗号, 整数型
.局部变量 文本, 文本型
.局部变量 数据, 字节集
.局部变量 数据2, 字节集
.局部变量 文本数组, 文本型, , "0"
位置_逗号 = 寻找文本 (VALUE, “,”, , 假)
位置_右引号 = 倒找文本 (VALUE, #引号, 位置_逗号, 假)
位置_左引号 = 寻找文本 (VALUE, #引号, , 假)
.如果真 (取文本中间 (VALUE, 位置_左引号 + 1, 位置_右引号 - 位置_左引号 - 1) = “Translation”)
  ' 第1、2字节用于占用,待分析结束后,把数据的长度数值写回第1、2字节
  数据 = { 0, 0, 0, 0, 1, 0 } + 转换Ansi转Unicode (取文本中间 (VALUE, 位置_左引号 + 1, 位置_右引号 - 位置_左引号 - 1))
  .如果真 (取字节集长度 (数据) % 4 ≠ 0)
    数据 = 数据 + 取空白字节集 (4 - 取字节集长度 (数据) % 4)
  .如果真结束
  文本 = My删首尾空 (取文本右边 (VALUE, 取文本长度 (VALUE) - 位置_逗号))
  文本数组 = 分割文本 (文本, “ ”, )
  .如果真 (取数组成员数 (文本数组) ≥ 2)
    数据2 = 到字节集 (到短整数 (十六到十 (文本数组 [1]))) + 到字节集 (到短整数 (十六到十 (文本数组 [2])))
    数据 = 字节集替换 (数据, 3, 取数据类型尺寸 (#短整数型), 到字节集 (到短整数 (取字节集长度 (数据2))))
    数据 = 数据 + 数据2
    返回 (字节集替换 (数据, 1, 取数据类型尺寸 (#短整数型), 到字节集 (到短整数 (取字节集长度 (数据)))))
  .如果真结束
  返回 ({ })
.如果真结束
' 第1、2字节用于占用,待分析结束后,把数据的长度数值写回第1、2字节
数据 = { 0, 0, 0, 0, 1, 0 } + 转换Ansi转Unicode (取文本中间 (VALUE, 位置_左引号 + 1, 位置_右引号 - 位置_左引号 - 1))
.如果真 (取字节集长度 (数据) % 4 ≠ 0)
  数据 = 数据 + 取空白字节集 (4 - 取字节集长度 (数据) % 4)
.如果真结束
位置_左引号 = 寻找文本 (VALUE, #引号, 位置_逗号, 假)
位置_右引号 = 倒找文本 (VALUE, #引号, , 假)
数据2 = 转换Ansi转Unicode (取文本中间 (VALUE, 位置_左引号 + 1, 位置_右引号 - 位置_左引号 - 1))
.如果真 (取字节集长度 (数据2) % 4 ≠ 0)
  数据2 = 数据2 + 取空白字节集 (4 - 取字节集长度 (数据2) % 4)
.如果真结束
数据 = 字节集替换 (数据, 3, 取数据类型尺寸 (#短整数型), 到字节集 (到短整数 (取字节集长度 (数据2) ÷ 2)))
数据 = 数据 + 数据2
返回 (字节集替换 (数据, 1, 取数据类型尺寸 (#短整数型), 到字节集 (到短整数 (取字节集长度 (数据)))))
.子程序 转换Ansi转Unicode, 字节集, 公开, 将Ansi码转换为Unicode码 (返回转换后的字节集)
.参数 Ansi, 文本型, , 欲转换的Ansi文本
.局部变量 数据2, 字节集
.局部变量 长度
.如果真 (Ansi = “”)
  返回 ({ 0, 0 })
.如果真结束
长度 = MultiByteToWideChar (0, 0, Ansi, 取文本长度 (Ansi) + 1, 数据2, 0)
数据2 = 取空白字节集 (长度 × 2)
MultiByteToWideChar (0, 0, Ansi, 取文本长度 (Ansi) + 1, 数据2, 长度 × 2)
返回 (数据2)
.子程序 MAKEBLOCK, 字节集
.参数 BLOCK, 文本型
.局部变量 位置1, 整数型
.局部变量 位置2, 整数型
.局部变量 数据, 字节集
位置1 = 寻找文本 (BLOCK, #引号, , 假)
位置2 = 倒找文本 (BLOCK, #引号, , 假)
' 第1、2字节用于占用,待分析结束后,把数据的长度数值写回第1、2字节
数据 = { 0, 0, 0, 0, 1, 0 } + 转换Ansi转Unicode (取文本中间 (BLOCK, 位置1 + 1, 位置2 - 位置1 - 1))
.如果真 (取字节集长度 (数据) % 4 ≠ 0)
  数据 = 数据 + 取空白字节集 (4 - 取字节集长度 (数据) % 4)
.如果真结束
返回 (数据)
.子程序 十六到十, 整数型, 公开, 将十六进制转换成十进制(返回十进制文本)
.参数 十六进制文本, 文本型, , 待转换的十六进制文本
.参数 返回结果, 文本型, 参考 可空, 返回文本结果(如十进制数超出整数范围,可通过返回结果获得十进制文本)
.局部变量 中间文本, 文本型
.局部变量 结果, 长整数型
.局部变量 容器1, 整数型
返回结果 = “”
.变量循环首 (1, 取文本长度 (十六进制文本), 1, 容器1)
  中间文本 = 取文本中间 (十六进制文本, 容器1, 1)
  结果 = (寻找文本 (“0123456789ABCDEF”, 中间文本, , 真) - 1) × 求次方 (16, 取文本长度 (十六进制文本) - 容器1) + 结果
.变量循环尾 ()
.如果真 (是否为空 (返回结果) = 假)
  返回结果 = 到文本 (结果)
.如果真结束
返回 (结果)
.子程序 My删首尾空, 文本型
.参数 文本, 文本型
.局部变量 字节集, 字节集
.局部变量 n, 整数型
.局部变量 pos1, 整数型
.局部变量 pos2, 整数型
字节集 = 到字节集 (文本)
.变量循环首 (1, 取字节集长度 (字节集), 1, n)
  .如果真 (字节集 [n] ≠ #空格键 且 字节集 [n] ≠ #Tab键)
    pos1 = n
    跳出循环 ()
  .如果真结束
.变量循环尾 ()
.变量循环首 (取字节集长度 (字节集), 1, -1, n)
  .如果真 (字节集 [n] ≠ #空格键 且 字节集 [n] ≠ #Tab键)
    pos2 = n
    跳出循环 ()
  .如果真结束
.变量循环尾 ()
返回 (取文本中间 (文本, pos1, pos2 - pos1 + 1))
.子程序 获取行类型, 文本型
.参数 行文本, 文本型
行文本 = My删首尾空 (行文本)
.判断开始 (取文本左边 (行文本, 1) = “{”)
  返回 (“{”)
.判断 (取文本左边 (行文本, 1) = “}”)
  返回 (“}”)
.判断 (取文本左边 (行文本, 5) = “BLOCK”)
  返回 (“BLOCK”)
.判断 (取文本左边 (行文本, 5) = “VALUE”)
  返回 (“VALUE”)
.判断 (取文本左边 (行文本, 取文本长度 (“FILEVERSION”)) = “FILEVERSION”)
  返回 (“FILEVERSION”)
.判断 (取文本左边 (行文本, 取文本长度 (“PRODUCTVERSION”)) = “PRODUCTVERSION”)
  返回 (“PRODUCTVERSION”)
.判断 (取文本左边 (行文本, 取文本长度 (“FILEOS”)) = “FILEOS”)
  返回 (“FILEOS”)
.判断 (取文本左边 (行文本, 取文本长度 (“FILETYPE”)) = “FILETYPE”)
  返回 (“FILETYPE”)
.默认
.判断结束
返回 (“”)
.子程序 __启动窗口_创建完毕
拖放对象1.注册拖放控件 (_启动窗口.取窗口句柄 ())
.子程序 _拖放对象1_得到文件
.参数 接收到的文件路径, 文本型
编辑框_路径.内容 = 接收到的文件路径
.子程序 版权
.局部变量 版权, 版权信息型
.局部变量 文件名, 文本型
版权.公司 = 编辑框_公司.内容
版权.描述 = 编辑框_描述.内容
版权.版权 = 编辑框_版权.内容
版权.文件版本 = 编辑框_版本.内容
版权.源文件名 = 编辑框_源文件名.内容
版权.内部名称 = 编辑框_内部名.内容
版权.产品名称 = 编辑框_产品名.内容
版权.产品版本 = 编辑框_产品版本.内容
修改版权信息 (编辑框_路径.内容, 版权)
信息框 (“修改完成..”, 64, “提示”)
.子程序 _设置按钮_被单击
版权 ()

运行结果:

易语言修改软件版权信息的工具

总结

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