MAC魔术包自动唤醒
2020-03-29 18:10

 

'使用方法:

'新建一个工程,在Form1上添加三个Text控件,三个标签控件,一个命令按钮和一个Winsock1控件,然后复制下面的代码到Form1,如图:
 

Dim MagicPacket(0 To 101) As Byte
'魔术包
Dim myMAC(0 To 5) As Byte
'欲唤醒的主机的MAC地址

Private Sub StrToMAC(ByVal myStrMAC As String)


'将MAC地址的字符串形式转化为十六进制数值保存在数组myMAC里

Dim i As Integer
Dim tempStr As String
For i = 0 To 5
tempStr = Mid(myStrMAC, i * 2 + 1, 2)
myMAC(i) = "&H" & tempStr
Next i
End Sub

Private Sub CmdToOn_Click()
Dim Mac(12) As String
Mac(0) = "C400AD128551"
Mac(1) = "C400AD12855c"
Mac(2) = "C400AD1285F5"
Mac(3) = "C400AD128547"
Mac(4) = "C400AD128561"
Mac(5) = "C400AD1285B2"
Mac(6) = "C400AD128560"
Mac(7) = "C400AD12854F"
Mac(8) = "C400AD1284D4"
Mac(9) = "C400AD128569"
Mac(10) = "C400AD02FE2C"
Mac(11) = "C400AD1284DB"
Mac(12) = "C400AD1284FC"

For i = 0 To 11
If Chk(i).Value = vbChecked Then Call Pc_On(Winsock1, Mac(i))
Next

End Sub

Private Sub Pc_On(Wins As Winsock, Mac As String)

'发送远程开机命令
Dim i As Integer
Wins.RemoteHost = "1.1.1.1"
Wins.RemotePort = 0
Call StrToMAC(Mac)
For i = 0 To 5
'以下两个For是创建一个魔术包
MagicPacket(i) = 255
Next i

For i = 6 To 101
MagicPacket(i) = myMAC((i Mod 6))
Next i

Wins.SendData MagicPacket
'发送魔术包(不管是在局域网还是在广域网,只要一台电脑检测到对应MAC的魔术包就自动唤醒)
End Sub
Private Sub Command1_Click()

'发送远程开机命令
Dim i As Integer
Winsock1.RemoteHost = Text2.Text
Winsock1.RemotePort = Text3.Text
Call StrToMAC(Text1.Text)
For i = 0 To 5
'以下两个For是创建一个魔术包
MagicPacket(i) = 255
Nexti

For i = 6 To 101
MagicPacket(i) = myMAC((i Mod 6))
Nexti

Winsock1.SendData MagicPacket
'发送魔术包(不管是在局域网还是在广域网,只要一台电脑检测到对应MAC的魔术包就自动唤醒)
End Sub

Private Sub Command2_Click()
For i = 0 To 11
Chk(i).Value = vbChecked
Next
End Sub

Private Sub Command3_Click()
For i = 0 To 11
 If Chk(i).Value = vbChecked Then
 Chk(i) = vbUnchecked
 Else
  Chk(i) = vbChecked
 End If
Next

End Sub

Private Sub Form_Load()

Label1.Caption = "MAC地址:"

Label2.Caption = "所在网段的广播地址(IP):"

Label3.Caption = "广播端口:"

Command1.Caption = "发送远程开机命令"

Winsock1.Protocol = sckUDPProtocol

'使用UDP协议

Text1.Text = "C400AD128551"

'欲唤醒的电脑的MAC地址,MAC地址的格式要求这样填(数值之间没有其它字符)

Text2.Text = "192.168.1.255"

'广播地址(因为远程电脑已关机,没有IP地址,所以只能以广播形式找到要打开的电脑,广域网的话填路由器的IP)
Text3.Text = "0"

'端口号,在局域网里的话就为0吧,广域网的话就看你的路由器开放哪个端口了!

End Sub