Private Const IP_SUCCESS As Long = 0
Private Const MAX_WSADescription As Long = 256
Private Const MAX_WSASYSStatus As Long = 128
Private Const WS_VERSION_REQD As Long = &H101
Private Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF&
Private Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF&
Private Const MIN_SOCKETS_REQD As Long = 1
Private Const SOCKET_ERROR As Long = -1
Private Const ERROR_SUCCESS As Long = 0
Private Type WSADATA
wVersion As Integer
wHighVersion As Integer
szDescription(0 To MAX_WSADescription) As Byte
szSystemStatus(0 To MAX_WSASYSStatus) As Byte
wMaxSockets As Long
wMaxUDPDG As Long
dwVendorInfo As Long
End Type
Private Declare Function gethostbyname Lib "wsock32.dll" _
(ByVal hostname As String) As Long
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(xDest As Any, _
xSource As Any, _
ByVal nbytes As Long)
Private Declare Function lstrlenA Lib "kernel32" _
(lpString As Any) As Long
Private Declare Function WSAStartup Lib "wsock32.dll" _
(ByVal wVersionRequired As Long, _
lpWSADATA As WSADATA) As Long
Private Declare Function WSACleanup Lib "wsock32.dll" () As Long
Private Declare Function inet_ntoa Lib "wsock32.dll" _
(ByVal addr As Long) As Long
Private Declare Function lstrcpyA Lib "kernel32" _
(ByVal RetVal As String, _
ByVal Ptr As Long) As Long
Private Declare Function gethostname Lib "wsock32.dll" _
(ByVal szHost As String, _
ByVal dwHostLen As Long) As Long
Private Sub Command1_Click()
Command1.Caption = "Resolving"
Command1.Enabled = False
Dim sHostName As String
If SocketsInitialize() Then
Dim mac As String
Dim IPAddress As String
mac = Replace(txtMAC.Text, ":", "")
mac = Replace(mac, "-", "")
mac = Replace(mac, " ", "")
Dim data As String
data = "FFFFFFFFFFFF"
For i = 1 To 16
data = data & mac
Next i
data = hex2ascii(data)
WinsockUDP.RemotePort = Val(txtPort)
WinsockUDP.RemoteHost = GetIPFromHostName(txtIP.Text)
WinsockUDP.LocalPort = Val(txtlocalport)
SaveSetting "WakeMeUp", "defaults", "IPAddress", GetIPFromHostName(txtIP.Text)
SaveSetting "WakeMeUp", "defaults", "MACAddress", mac
SaveSetting "WakeMeUp", "defaults", "RemotePort", txtPort
SaveSetting "WakeMeUp", "defaults", "LocalPort", txtlocalport
SaveSetting "WakeMeUp", "defaults", "Packets2Send", cmbQTY.ListIndex
For x = 0 To cmbQTY.ListIndex
If Len(data) > 15 Then
WinsockUDP.SendData (data)
WinsockUDP.Close
Else
MsgBox "Could not resolve host name."
End If
Next x
MsgBox cmbQTY.ListIndex + 1 & " packet(s) sent to " & GetIPFromHostName(txtIP.Text)
Else
MsgBox "Could not resolve host name."
End If
Command1.Caption = "Send Packet(s)"
Command1.Enabled = True
End Sub
Public Function hex2ascii(ByVal hextext As String) As String
For Y = 1 To Len(hextext)
num = Mid(hextext, Y, 2)
Value = Value & Chr(Val("&h" & num))
Y = Y + 1
Next Y
hex2ascii = Value
End Function
Private Sub Form_Load()
txtIP = GetSetting("WakeMeUp", "defaults", "IPAddress", "")
txtMAC = GetSetting("WakeMeUp", "defaults", "MACAddress", "FFFFFFFFFFFF")
txtPort = GetSetting("WakeMeUp", "defaults", "RemotePort", 9)
txtlocalport = GetSetting("WakeMeUp", "defaults", "LocalPort", "3340")
tmp = GetSetting("WakeMeUp", "defaults", "Packets2Send", "2")
If Val(tmp) < 0 Or tmp > 19 Then
tmp = 2
End If
cmbQTY.ListIndex = tmp
End Sub
Private Function SocketsInitialize() As Boolean
Dim WSAD As WSADATA
Dim success As Long
SocketsInitialize = WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS
End Function
Private Function GetIPFromHostName(ByVal sHostName As String) As String
'converts a host name to an IP address
Dim nbytes As Long
Dim ptrHosent As Long 'address of HOSENT structure
Dim ptrName As Long 'address of name pointer
Dim ptrAddress As Long 'address of address pointer
Dim ptrIPAddress As Long
Dim ptrIPAddress2 As Long
ptrHosent = gethostbyname(sHostName & vbNullChar)
If ptrHosent <> 0 Then
'assign pointer addresses and offset
'Null-terminated list of addresses for the host.
'The Address is offset 12 bytes from the start of
'the HOSENT structure. Note: Here we are retrieving
'only the first address returned. To return more than
'one, define sAddress as a string array and loop through
'the 4-byte ptrIPAddress members returned. The last
'item is a terminating null. All addresses are returned
'in network byte order.
ptrAddress = ptrHosent + 12
'get the IP address
CopyMemory ptrAddress, ByVal ptrAddress, 4
CopyMemory ptrIPAddress, ByVal ptrAddress, 4
CopyMemory ptrIPAddress2, ByVal ptrIPAddress, 4
GetIPFromHostName = GetInetStrFromPtr(ptrIPAddress2)
End If
End Function
Private Function GetStrFromPtrA(ByVal lpszA As Long) As String
GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)
Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)
End Function
Private Function GetInetStrFromPtr(Address As Long) As String
GetInetStrFromPtr = GetStrFromPtrA(inet_ntoa(Address))
End Function