回 帖 发 新 帖 刷新版面

主题:刚做出来的VB远程唤醒电脑,太简单了,要代码的请进

'Text1为欲唤醒的电脑的物理地址(如:010203ABCDEF),MAC地址之间不能有任何其它字符(如:":","-"等),
'如果是在同一个局域网中,Text2填你的局域的广播地址,Text3默认为0得了。
'广域网远程开机还没来得及试,在Text2里填欲开机的电脑所在网络的公网IP,Text3填路由器里映射的端口,理论上是可以实现的。

Dim MagicPacket(0 To 101) As Byte
Dim myMAC(0 To 5) As Byte

Private Function HEX_to_DEC(ByVal Hex As String) As Long
    Dim i As Long
    Dim B As Long
   
    Hex = UCase(Hex)
    For i = 1 To Len(Hex)
        Select Case Mid(Hex, Len(Hex) - i + 1, 1)
            Case "0": B = B + 16 ^ (i - 1) * 0
            Case "1": B = B + 16 ^ (i - 1) * 1
            Case "2": B = B + 16 ^ (i - 1) * 2
            Case "3": B = B + 16 ^ (i - 1) * 3
            Case "4": B = B + 16 ^ (i - 1) * 4
            Case "5": B = B + 16 ^ (i - 1) * 5
            Case "6": B = B + 16 ^ (i - 1) * 6
            Case "7": B = B + 16 ^ (i - 1) * 7
            Case "8": B = B + 16 ^ (i - 1) * 8
            Case "9": B = B + 16 ^ (i - 1) * 9
            Case "A": B = B + 16 ^ (i - 1) * 10
            Case "B": B = B + 16 ^ (i - 1) * 11
            Case "C": B = B + 16 ^ (i - 1) * 12
            Case "D": B = B + 16 ^ (i - 1) * 13
            Case "E": B = B + 16 ^ (i - 1) * 14
            Case "F": B = B + 16 ^ (i - 1) * 15
        End Select
    Next i
    HEX_to_DEC = B
End Function

Private Sub StrToMAC(ByVal myStr As String)
Dim i As Integer
Dim tempStr As String

For i = 0 To 5
    tempStr = Mid(myStr, i * 2 + 1, 2)
    myMAC(i) = HEX_to_DEC(tempStr)
Next i

End Sub

Private Sub Command1_Click()   '发送远程开机命令
Dim i As Integer

Call StrToMAC(Text1.Text)
Winsock1.RemoteHost = Text2.Text
Winsock1.RemotePort = Text3.Text

'以下两个For是设置魔术包
For i = 0 To 5
    MagicPacket(i) = 255
Next i

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

Winsock1.SendData MagicPacket
End Sub

Private Sub Form_Load()
Winsock1.Protocol = sckUDPProtocol   '使用UDP协议
Text1.Text = "010203ABCDEF"          'MAC地址填写的格式要求这样填
Text2.Text = "192.168.1.255"         '广播地址
Text3.Text = "0"
End Sub

回复列表 (共7个回复)

沙发

在运行程序前请设置好欲唤醒的电脑的BIOS哦,不然没有效果不要说我的程序无效,我是刚做完实验,成功了才把代码发出来的。

觉得有用的就用力帮我顶上去……

板凳

我还没有试验,不过觉得应该有用,顶一下

3 楼

对,bios必须支持远程开机

4 楼

'今天突然想到十六进制的字符串转换成数值可以有更简单的办法,下面的远程开机程序简洁多了

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 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
    Next i
    For i = 6 To 101
        MagicPacket(i) = myMAC((i Mod 6))
    Next i
    Winsock1.SendData MagicPacket   '发送魔术包
End Sub
Private Sub Form_Load()
    Winsock1.Protocol = sckUDPProtocol   '使用UDP协议
    Text1.Text = "010203ABCDEF"          'MAC地址填写的格式要求这样填
    Text2.Text = "192.168.1.255"         '广播地址
    Text3.Text = "0"
End Sub

5 楼

此贴值得一顶!

6 楼

[url=http://www.oilpaintingsuksale.com]oil paintings[/url]
[url=http://www.oilpaintingsuksale.com]painting oil[/url]
[url=http://www.oilpaintingsuksale.com]painting in oil[/url]
[url=http://www.oilpaintingsuksale.com]oil paints[/url]
[url=http://www.oilpaintingsuksale.com]paint oil[/url]
[url=http://www.oilpaintingsuksale.com]oil on canvas[/url]
[url=http://www.oilpaintingsuksale.com]oil canvas[/url]
[url=http://www.oilpaintingsuksale.com]oil and painting[/url]
[url=http://www.ukdress.co.uk]uk evening dresses[/url]
[url=http://www.ukdress.co.uk]prom dresses uk[/url]
[url=http://www.Laserpointeronsale.com]laser pointers[/url]

7 楼

好!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册