设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 2870|回复: 3
收起左侧

WOL协议通过局域网MAC地址远程唤醒网卡主板开机易语言纯源码

[复制链接]
发表于 2018-8-16 12:59:59 | 显示全部楼层 |阅读模式
本帖最后由 CNWTEPRG 于 2018-8-16 13:02 编辑

使用此功能需要主板、Bios、网卡支持远程唤醒功能,且在Bios中设置允许远程唤醒即可生效,只支持有线连接的主板唤醒。

  1. .版本 2

  2. .程序集 窗口程序集_启动窗口

  3. .子程序 __启动窗口_创建完毕
  4. .局部变量 MAC文本, 文本型
  5. .局部变量 MAC字节集, 字节集
  6. .局部变量 数据包, 字节集
  7. .局部变量 IP地址, 文本型
  8. .局部变量 INI_MAC文本, 文本型
  9. .局部变量 INI路径, 文本型
  10. .局部变量 INI_IP地址, 文本型
  11. .局部变量 MAC文本2, 文本型

  12. 数据报1.端口 = 1
  13. 标题 = “WOL远程唤醒开机”
  14. INI路径 = 取运行目录 () + “\wol.ini”
  15. INI_MAC文本 = 读配置项 (INI路径, “WOL”, “MAC”, “”)
  16. INI_IP地址 = 读配置项 (INI路径, “WOL”, “IP”, “”)
  17. .如果真 (输入框 (“请输入被远程开机的MAC地址:”, 标题, INI_MAC文本, MAC文本, 1, _启动窗口) = 假)
  18.     结束 ()
  19. .如果真结束
  20. MAC文本2 = MAC文本
  21. MAC文本 = 子文本替换 (MAC文本, “-”, , , , 真)
  22. MAC文本 = 子文本替换 (MAC文本, “:”, , , , 真)
  23. MAC文本 = 到大写 (删全部空 (到半角 (MAC文本)))
  24. MAC字节集 = 十六进制转字节集 (MAC文本)
  25. .如果真 (取字节集长度 (MAC字节集) ≠ 6 或 字节集到十六进制 (MAC字节集, 真) ≠ MAC文本)
  26.     信息框 (“无效的MAC地址格式。”, 16, 标题, _启动窗口)
  27.     结束 ()
  28. .如果真结束
  29. .如果真 (输入框 (“请输入局域网广播地址:”, 标题, INI_IP地址, IP地址, 1, _启动窗口) = 假)
  30.     结束 ()
  31. .如果真结束
  32. 数据包 = 取重复字节集 (6, { 255 }) + 取重复字节集 (16, MAC字节集)
  33. .如果 (数据报1.发送数据 (IP地址, 0, 数据包) = 真)
  34.     信息框 (“远程开机命令已送达指定的的机器中。”, 64, 标题, _启动窗口)
  35.     .判断开始 (写配置项 (INI路径, “WOL”, “IP”, IP地址) = 假)
  36.         信息框 (“写INI文件失败!”, 16, 标题, _启动窗口)
  37.         结束 ()
  38.     .判断 (写配置项 (INI路径, “WOL”, “MAC”, MAC文本2) = 假)
  39.         信息框 (“写INI文件失败!”, 16, 标题, _启动窗口)
  40.         结束 ()
  41.     .默认

  42.     .判断结束

  43. .否则
  44.     信息框 (“发送UDP数据包时出现错误!”, 16, 标题, _启动窗口)
  45. .如果结束
  46. 结束 ()


  47. .子程序 字节集到十六进制, 文本型
  48. .参数 字节集, 字节集
  49. .参数 大写, 逻辑型, 可空
  50. .局部变量 字节集长度, 整数型
  51. .局部变量 返回值, 文本型
  52. .局部变量 计数, 整数型
  53. .局部变量 十六进制文本, 文本型

  54. 字节集长度 = 取字节集长度 (字节集)
  55. .如果 (大写)
  56.     十六进制文本 = “0123456789ABCDEF”
  57. .否则
  58.     十六进制文本 = “0123456789abcdef”
  59. .如果结束
  60. .计次循环首 (字节集长度, 计数)
  61.     返回值 = 返回值 + 取文本中间 (十六进制文本, 右移 (字节集 [计数], 4) + 1, 1) + 取文本中间 (十六进制文本, 位与 (字节集 [计数], 15) + 1, 1)
  62. .计次循环尾 ()
  63. 返回 (返回值)


  64. .子程序 十六进制转字节集, 字节集
  65. .参数 文本, 文本型
  66. .局部变量 计数, 整数型
  67. .局部变量 返回值, 字节集
  68. .局部变量 计数2, 整数型
  69. .局部变量 文本长度, 整数型

  70. 文本长度 = 取文本长度 (文本)
  71. .如果真 (位与 (文本长度, 1) = 1)
  72.     输出调试文本 (“十六进制文本转字节集不得为奇数字节。”)
  73.     返回 ({  })
  74. .如果真结束
  75. 返回值 = 取空白字节集 (文本长度 ÷ 2)
  76. .变量循环首 (1, 文本长度, 2, 计数)
  77.     计数2 = 计数2 + 1
  78.     返回值 [计数2] = 十六进制转字节 (取文本中间 (文本, 计数, 2))
  79. .变量循环尾 ()
  80. 返回 (返回值)


  81. .子程序 十六进制转字节, 字节型
  82. .参数 十六进制文本, 文本型

  83. 十六进制文本 = 到大写 (取文本左边 (十六进制文本, 2))
  84. 返回 (位或 (左移 (一位十六进制到十进制 (取文本左边 (十六进制文本, 1)), 4), 一位十六进制到十进制 (取文本右边 (十六进制文本, 1))))


  85. .子程序 一位十六进制到十进制, 字节型
  86. .参数 十六进制文本, 文本型
  87. .局部变量 十六进制文本2, 文本型
  88. .局部变量 计数, 整数型

  89. 十六进制文本 = 到大写 (十六进制文本)
  90. 十六进制文本2 = “0123456789ABCDEF”
  91. .计次循环首 (16, 计数)
  92.     .如果真 (取文本中间 (十六进制文本2, 计数, 1) = 十六进制文本)
  93.         返回 (计数 - 1)
  94.     .如果真结束

  95. .计次循环尾 ()
  96. 返回 (255)


复制代码

发表于 2018-8-16 17:48:35 | 显示全部楼层
不错,已测试通过。
发表于 2018-8-16 21:06:07 | 显示全部楼层
都是大神搞这吉
发表于 2018-8-17 00:22:12 | 显示全部楼层
路过此地无银三百两
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-3-29 07:53 , Processed in 0.703040 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表