i needed this kind of functionality, but rewritten without temporary file, using wmi, regexp and bitwise operations :
#Region AutoIt3Wrapper directives section
#AutoIt3Wrapper_Prompt=y
#AutoIt3Wrapper_Run_Debug_Mode=n
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Allow_Decompile=n
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_Comment=send wake on lan packet to a mac address
#AutoIt3Wrapper_Res_Description=wake on lan packet generator
#AutoIt3Wrapper_Res_Fileversion=1.0.0.30
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=CopyLeft 2007 - psadac
#AutoIt3Wrapper_Res_Field=Licence|GNU GPL V2 (http://www.gnu.org/copyleft/gpl.html)
#EndRegion
#NoTrayIcon
#include <String.au3>
Opt("MustDeclareVars", 1)
Opt("RunErrorsFatal", 0)
Const $wbemFlagReturnImmediately = 0x10
Const $wbemFlagForwardOnly = 0x20
; Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address
Func ip2long($ip_str)
Local $ip_arr = StringRegExp($ip_str, "(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})", 1)
If @error Then
SetError(1) ; incorrect address
Return 0
EndIf
Return BitOR( _
BitShift($ip_arr[0], -24), _
BitShift($ip_arr[1], -16), _
BitShift($ip_arr[2], -8), _
$ip_arr[3])
EndFunc ;==>ip2long
; Converts an (IPv4) Internet network address into a string in Internet standard dotted format
Func long2ip($ip)
Return BitAND(BitShift($ip, 24), 255) & "." & _
BitAND(BitShift($ip, 16), 255) & "." & _
BitAND(BitShift($ip, 8), 255) & "." & _
BitAND($ip, 255)
EndFunc ;==>long2ip
; sends a wake-on-lan packet on the broadcast address
Func wol($macAddr, $broadcastAddr)
UDPStartup()
Local $conn = UDPOpen($broadcastAddr, 7)
Local $packet = _HexToString("FFFFFFFFFFFF" & _StringRepeat(StringUpper($macAddr), 16))
UDPSend($conn, $packet)
If @error Then
SetError(@error)
Return False
EndIf
UDPCloseSocket($conn)
UDPShutdown()
Return True
EndFunc ;==>wol
If $cmdline[0] <> 1 Then
MsgBox(48, "Error", "usage" & @TAB & ": " & @ScriptName & " mac_address" & @CRLF & _
"example" & @TAB & ": " & @ScriptName & " 005056C00001")
Exit
EndIf
Local $macAddr = $cmdline[1]
If StringRegExp($macAddr, "[[:xdigit:]]{12}", 0) = 0 Then
MsgBox(48, "Error", "the mac address must be 12 hex digits.")
Exit
EndIf
; send wake on lan packet on each ip enabled local interface
Local $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2")
Local $colItems = $objWMIService.ExecQuery ("SELECT IPAddress, IPSubnet FROM Win32_NetworkAdapterConfiguration " & _
"WHERE IPEnabled<>0", "WQL", BitOR($wbemFlagReturnImmediately, $wbemFlagForwardOnly))
If IsObj($colItems) Then
For $objItems In $colItems
With $objItems
Local $ip = ip2long(.IPAddress (0))
If $ip <> 0 Then
Local $subnet = ip2long(.IPSubnet (0))
Local $broadcast_str = long2ip(BitOR($ip, BitNOT($subnet)))
If wol($macAddr, $broadcast_str) Then
MsgBox(64, "Info", "Wake on lan packet sent to MAC address '" & $macAddr & _
"' using broadcast address '" & $broadcast_str & "'.")
Else
MsgBox(48, "Error", "Failed to send Wake on lan packet")
EndIf
EndIf
EndWith
Next
EndIf