VB6 基于API的远程开机代码
来源:互联网 发布:java 项目中使用log4j 编辑:程序博客网 时间:2024/06/08 06:57
利用Magic Packet实现的远程开机代码
调用示例:
MagicPacket “192.168.1.100:54321” "A1-B2-C3-D4-E5-F6"
Private Const WSA_DescriptionLen = 256Private Const WSA_DescriptionSize = WSA_DescriptionLen + 1Private Const WSA_SYS_STATUS_LEN = 128Private Const WSA_SysStatusSize = WSA_SYS_STATUS_LEN + 1Private Const INVALID_SOCKET = -1Private Const SOCKET_ERROR = -1Private Const AF_INET = 2Private Const SOCK_DGRAM = 2Private Const IPPROTO_UDP = 17Private Type HostEnt hName As Long hAliases As Long hAddrType As Integer hLength As Integer hAddrList As LongEnd TypePrivate Type SockAddr Sin_Family As Integer Sin_Port As Integer Sin_Addr As Long Sin_Zero(7) As ByteEnd TypePrivate Type WSADataType wVersion As Integer wHighVersion As Integer szDescription As String * WSA_DescriptionSize szSystemStatus As String * WSA_SysStatusSize iMaxSockets As Integer iMaxUdpDg As Integer lpVendorInfo As LongEnd TypePrivate Declare Function CloseSocket Lib "ws2_32.dll" Alias "closesocket" (ByVal hSocket As Long) As LongPrivate Declare Function Conn Lib "ws2_32.dll" Alias "connect" (ByVal hSocket As Long, Addr As SockAddr, ByVal NameLen As Long) As LongPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Declare Function GetHostByName Lib "ws2_32.dll" Alias "gethostbyname" (ByVal HostName As String) As LongPrivate Declare Function Htons Lib "ws2_32.dll" Alias "htons" (ByVal HostShort As Integer) As IntegerPrivate Declare Function iNet_Addr Lib "wsock32.dll" Alias "inet_addr" (ByVal S As String) As LongPrivate Declare Function Send Lib "ws2_32.dll" Alias "send" (ByVal hSocket As Long, Buf As Any, ByVal BufLen As Long, ByVal Flags As Long) As LongPrivate Declare Function Socket Lib "ws2_32.dll" Alias "socket" (ByVal af As Long, ByVal sType As Long, ByVal Protocol As Long) As LongPrivate Declare Function WSACleanup Lib "ws2_32.dll" () As LongPrivate Declare Function WSAStartup Lib "ws2_32.dll" (ByVal wVR As Long, lpWSAD As WSADataType) As LongPublic Sub MagicPacket(ByVal Host As String, ByVal MAC As String) Dim WSAData As WSADataType, SA As SockAddr, hHost As HostEnt Dim hSocket As Long, Port As Long, R As Long, I As Integer, Data() As Byte If WSAStartup(&H202, WSAData) <> 0 Then WSACleanup Exit Sub End If Port = 9 '当不输入端口号时,默认端口号为9 If (InStr(Host, ":") > 0) Then If IsNumeric(Right(Host, Len(Host) - InStr(Host, ":"))) = True Then Port = CLng(Right(Host, Len(Host) - InStr(Host, ":"))) Host = Left(Host, InStr(Host, ":") - 1) End If hSocket = Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) SA.Sin_Family = AF_INET SA.Sin_Port = Htons(CInt("&H" & Hex(Port))) SA.Sin_Addr = iNet_Addr(Host) If SA.Sin_Addr = INVALID_SOCKET Then R = GetHostByName(Host) If R <> 0 Then CopyMemory hHost, ByVal R, LenB(hHost) CopyMemory R, ByVal hHost.hAddrList, LenB(R) CopyMemory SA.Sin_Addr, ByVal R, hHost.hLength End If End If If Conn(hSocket, SA, LenB(SA)) = SOCKET_ERROR Then WSACleanup Exit Sub End If MAC = Replace(MAC, "-", "") MAC = Replace(MAC, ":", "") ReDim Data(101) For I = 0 To 5 Data(I) = &HFF Next For I = 0 To 15 Data((I + 1) * 6) = CByte("&H" & Mid(MAC, 1, 2)) Data((I + 1) * 6 + 1) = CByte("&H" & Mid(MAC, 3, 2)) Data((I + 1) * 6 + 2) = CByte("&H" & Mid(MAC, 5, 2)) Data((I + 1) * 6 + 3) = CByte("&H" & Mid(MAC, 7, 2)) Data((I + 1) * 6 + 4) = CByte("&H" & Mid(MAC, 9, 2)) Data((I + 1) * 6 + 5) = CByte("&H" & Mid(MAC, 11, 2)) Next Send hSocket, Data(0), UBound(Data) + 1, 0 CloseSocket hSocketEnd Sub
0 0
- VB6 基于API的远程开机代码
- VB6基于Windows API的Modbus RTU/ASCII/TCP的主站实现代码
- 远程开机的原理与代码实现
- C#远程开机代码
- 基于Laravel的API服务端架构代码
- VB6是基于对象的程序设计工具
- 基于VB6的餐卡系统二次开发
- C#远程开机代码 【局域网测试通过】
- 如何编写高质量的VB6代码
- OrFlying VB6版产生的代码示例
- VB6.0 Windows API
- 开机启动的代码
- 基于PHP的车辆违章查询api调用代码示例
- 基于JAVA的货币汇率api调用代码实例
- 在VB6中使用API函数实现矢量图的绘制。
- 在VB6中使用API函数实现矢量图的绘制
- 远程开机
- 远程开机
- HDU 2844(多重背包)
- Java EE容器
- Oulipo HDU杭电1686【KMP】
- HDU 5715 XOR 游戏(二分+dp+01字典树)
- 哈夫曼树
- VB6 基于API的远程开机代码
- 【机器学习】bias and variance
- MyEclipse 新建->后面的菜单选项设置
- linux下为java设置正确的时区
- 编写最小生成树代码遇到的小问题
- 分类讨论
- LightOJ 1138(求末尾零个数)
- SDUTACM 数据结构实验之排序七:选课名单
- myeclipse集成maven