.版本 2
.程序集 窗口程序集_启动窗口
.程序集变量 socket, 整数型
.子程序 __启动窗口_创建完毕
.局部变量 WSAData, WSADataType
.局部变量 sLinger, 字节集
.局部变量 addr, sockaddr_in
.局部变量 ret, 逻辑型
WSAStartup (514, WSAData)
socket = socket (2, 2, 17)
.判断开始 (socket > 0)
sLinger = { 1, 0 } ' 1=开关选项 0=空闲时间
setsockopt (socket, 65535, 32, sLinger, 4) ' 这句是关键否则发送会失败
addr.sin_family = 2
ret = bind (socket, addr, 16) > -1
.如果真 (ret = 假)
closesocket (socket)
socket = 0
提示标签.标题 = “启动 Socket 失败!”
.如果真结束
.默认
提示标签.标题 = “创建 Socket 失败!”
.判断结束
.子程序 _内网按钮_被单击
发送wol (MAC框.内容)
.子程序 _外网按钮_被单击
发送wol (MAC框.内容, IP框.内容, 到整数 (端口框.内容))
.子程序 生成wol包, 字节集
.参数 mac, 文本型
.局部变量 i
.局部变量 字节, 字节型, , "0"
.局部变量 值
.局部变量 machex, 字节型, , "0"
.局部变量 Data, 字节集
mac = 子文本替换 (mac, “:”, “”, , , 真)
mac = 子文本替换 (mac, “-”, “”, , , 真)
.如果真 (取文本长度 (mac) ≠ 12)
返回 ({ })
.如果真结束
.变量循环首 (1, 取文本长度 (mac), 2, i)
StrToIntEx (“0x” + 取文本中间 (mac, i, 2), 1, 值)
加入成员 (字节, 值)
.变量循环尾 ()
.计次循环首 (16, i)
加入成员 (machex, 字节)
.计次循环尾 ()
Data = { 255, 255, 255, 255, 255, 255 } + 到字节集 (machex)
返回 (Data)
.子程序 发送wol
.参数 mac, 文本型
.参数 ip, 文本型, 可空
.参数 port, 整数型, 可空
.局部变量 Data, 字节集
.局部变量 addr, sockaddr_in
.局部变量 sendlen
.局部变量 lp_ip, 文本型
.如果真 (socket > 0)
提示标签.标题 = “”
处理事件 ()
Data = 生成wol包 (MAC框.内容)
.如果真 (Data = { })
提示标签.标题 = “生成wol包失败!”
返回 ()
.如果真结束
addr.sin_family = 2
.判断开始 (ip = “”)
addr.sin_addr = -1 ' -1 广播
.默认
' 外网唤醒
.如果真 (port > 0)
addr.sin_port = htons (port)
.如果真结束
lp_ip = ip
.如果真 (判断IP地址 (lp_ip) = 假)
lp_ip = 转换为IP地址_ (lp_ip)
.如果真结束
addr.sin_addr = inet_addr (lp_ip)
.判断结束
sendlen = sendto (socket, Data, 取字节集长度 (Data), 0, addr, 16)
提示标签.标题 = “发送 WOL ” + 选择 (sendlen > 0, “成功!”, “失败!”)
.如果真结束
.子程序 判断IP地址, 逻辑型
.参数 IP, 文本型
.局部变量 str, 文本型, , "0"
.局部变量 pCount
.局部变量 i
.局部变量 pre
str = 分割文本 (IP, “.”, )
pCount = 取数组成员数 (str)
.如果真 (pCount ≠ 4)
返回 (假)
.如果真结束
.计次循环首 (pCount, i)
pre = 到整数 (str [i])
.如果真 (pre < 0 或 pre > 255)
返回 (假)
.如果真结束
.计次循环尾 ()
返回 (真)
.子程序 转换为IP地址_, 文本型
.参数 机器名, 文本型
.局部变量 lpHost, 整数型
.局部变量 HOST, HOSTENT
.局部变量 dwIPAddr, 整数型
.局部变量 tmpIPAddr, 字节型, , "0"
.局部变量 i, 整数型
.局部变量 sIPAddr, 文本型
lpHost = gethostbyname (机器名)
.如果真 (lpHost ≠ 0)
RtlMoveMemory_HOSTENT (HOST, lpHost, 16)
RtlMoveMemory_整数 (dwIPAddr, HOST.hAddrList, 4)
重定义数组 (tmpIPAddr, 假, HOST.hLen)
RtlMoveMemory_字节型 (tmpIPAddr, dwIPAddr, HOST.hLen)
.计次循环首 (HOST.hLen, i)
.如果 (i = HOST.hLen)
sIPAddr = sIPAddr + 到文本 (tmpIPAddr [i]) ' 原来是到文本
.否则
sIPAddr = sIPAddr + 到文本 (tmpIPAddr [i]) + “.” ' 原来是到文本
.如果结束
.计次循环尾 ()
.如果真结束
返回 (sIPAddr)
.子程序 _IP框_获得焦点
判断tab (IP框)
.子程序 _端口框_获得焦点
判断tab (端口框)
.子程序 _MAC框_获得焦点
判断tab (MAC框)
.子程序 判断tab
.参数 局_编辑框, 编辑框
.如果真 (GetAsyncKeyState (#Tab键) ≠ 0)
局_编辑框.被选择字符数 = -1
.如果真结束