|
本帖最后由 CNWTEPRG 于 2018-8-16 13:02 编辑
使用此功能需要主板、Bios、网卡支持远程唤醒功能,且在Bios中设置允许远程唤醒即可生效,只支持有线连接的主板唤醒。
- .版本 2
- .程序集 窗口程序集_启动窗口
- .子程序 __启动窗口_创建完毕
- .局部变量 MAC文本, 文本型
- .局部变量 MAC字节集, 字节集
- .局部变量 数据包, 字节集
- .局部变量 IP地址, 文本型
- .局部变量 INI_MAC文本, 文本型
- .局部变量 INI路径, 文本型
- .局部变量 INI_IP地址, 文本型
- .局部变量 MAC文本2, 文本型
- 数据报1.端口 = 1
- 标题 = “WOL远程唤醒开机”
- INI路径 = 取运行目录 () + “\wol.ini”
- INI_MAC文本 = 读配置项 (INI路径, “WOL”, “MAC”, “”)
- INI_IP地址 = 读配置项 (INI路径, “WOL”, “IP”, “”)
- .如果真 (输入框 (“请输入被远程开机的MAC地址:”, 标题, INI_MAC文本, MAC文本, 1, _启动窗口) = 假)
- 结束 ()
- .如果真结束
- MAC文本2 = MAC文本
- MAC文本 = 子文本替换 (MAC文本, “-”, , , , 真)
- MAC文本 = 子文本替换 (MAC文本, “:”, , , , 真)
- MAC文本 = 到大写 (删全部空 (到半角 (MAC文本)))
- MAC字节集 = 十六进制转字节集 (MAC文本)
- .如果真 (取字节集长度 (MAC字节集) ≠ 6 或 字节集到十六进制 (MAC字节集, 真) ≠ MAC文本)
- 信息框 (“无效的MAC地址格式。”, 16, 标题, _启动窗口)
- 结束 ()
- .如果真结束
- .如果真 (输入框 (“请输入局域网广播地址:”, 标题, INI_IP地址, IP地址, 1, _启动窗口) = 假)
- 结束 ()
- .如果真结束
- 数据包 = 取重复字节集 (6, { 255 }) + 取重复字节集 (16, MAC字节集)
- .如果 (数据报1.发送数据 (IP地址, 0, 数据包) = 真)
- 信息框 (“远程开机命令已送达指定的的机器中。”, 64, 标题, _启动窗口)
- .判断开始 (写配置项 (INI路径, “WOL”, “IP”, IP地址) = 假)
- 信息框 (“写INI文件失败!”, 16, 标题, _启动窗口)
- 结束 ()
- .判断 (写配置项 (INI路径, “WOL”, “MAC”, MAC文本2) = 假)
- 信息框 (“写INI文件失败!”, 16, 标题, _启动窗口)
- 结束 ()
- .默认
- .判断结束
- .否则
- 信息框 (“发送UDP数据包时出现错误!”, 16, 标题, _启动窗口)
- .如果结束
- 结束 ()
- .子程序 字节集到十六进制, 文本型
- .参数 字节集, 字节集
- .参数 大写, 逻辑型, 可空
- .局部变量 字节集长度, 整数型
- .局部变量 返回值, 文本型
- .局部变量 计数, 整数型
- .局部变量 十六进制文本, 文本型
- 字节集长度 = 取字节集长度 (字节集)
- .如果 (大写)
- 十六进制文本 = “0123456789ABCDEF”
- .否则
- 十六进制文本 = “0123456789abcdef”
- .如果结束
- .计次循环首 (字节集长度, 计数)
- 返回值 = 返回值 + 取文本中间 (十六进制文本, 右移 (字节集 [计数], 4) + 1, 1) + 取文本中间 (十六进制文本, 位与 (字节集 [计数], 15) + 1, 1)
- .计次循环尾 ()
- 返回 (返回值)
- .子程序 十六进制转字节集, 字节集
- .参数 文本, 文本型
- .局部变量 计数, 整数型
- .局部变量 返回值, 字节集
- .局部变量 计数2, 整数型
- .局部变量 文本长度, 整数型
- 文本长度 = 取文本长度 (文本)
- .如果真 (位与 (文本长度, 1) = 1)
- 输出调试文本 (“十六进制文本转字节集不得为奇数字节。”)
- 返回 ({ })
- .如果真结束
- 返回值 = 取空白字节集 (文本长度 ÷ 2)
- .变量循环首 (1, 文本长度, 2, 计数)
- 计数2 = 计数2 + 1
- 返回值 [计数2] = 十六进制转字节 (取文本中间 (文本, 计数, 2))
- .变量循环尾 ()
- 返回 (返回值)
- .子程序 十六进制转字节, 字节型
- .参数 十六进制文本, 文本型
- 十六进制文本 = 到大写 (取文本左边 (十六进制文本, 2))
- 返回 (位或 (左移 (一位十六进制到十进制 (取文本左边 (十六进制文本, 1)), 4), 一位十六进制到十进制 (取文本右边 (十六进制文本, 1))))
- .子程序 一位十六进制到十进制, 字节型
- .参数 十六进制文本, 文本型
- .局部变量 十六进制文本2, 文本型
- .局部变量 计数, 整数型
- 十六进制文本 = 到大写 (十六进制文本)
- 十六进制文本2 = “0123456789ABCDEF”
- .计次循环首 (16, 计数)
- .如果真 (取文本中间 (十六进制文本2, 计数, 1) = 十六进制文本)
- 返回 (计数 - 1)
- .如果真结束
- .计次循环尾 ()
- 返回 (255)
复制代码
|
|