#NoEnv #Persistent #SingleInstance Force Menu,Tray,Tip,端口监听 Menu,Tray,Icon,Shell32.dll,19 Port = 1000 ;UDP端口范围1025-32767 AF_INET := 2 PF_INET := AF_INET SOCK_DGRAM := 2 IPPROTO_UDP := 17 INADDR_ANY := 0 FIONREAD := 0x4004667F ; WSADESCRIPTION_LEN := 256, WSASYS_STATUS_LEN := 128 WSADATAsize := 388 + (2 * 4) + A_PtrSize + (A_PtrSize - 2) SOCKADDRsize := 16 OnExit, AppExit ; Init DLL VarSetCapacity(WSADATA, WSADATAsize, 0) If (DllCall("Ws2_32.dllWSAStartup", "UShort", 0x0202, "Ptr", &WSADATA, "Int")) ErrorMsg("WSAStartup()") ; Socket RecvSocket := DllCall("Ws2_32.dllsocket", "Int", PF_INET, "Int", SOCK_DGRAM, "Int", IPPROTO_UDP, "UPtr") If (RecvSocket = 0xFFFFFF) ErrorMsg("socket()") VarSetCapacity(SOCKADDR, SOCKADDRsize, 0) NumPut(PF_INET, SOCKADDR, 0, "Short") NumPut(DllCall("Ws2_32.dllhtons", "UShort", Port), SOCKADDR, 2, "UShort") NumPut(INADDR_ANY, SOCKADDR, 4, "UInt") ; Bind If DllCall("Ws2_32.dllbind", "Ptr", RecvSocket, "Ptr", &SOCKADDR, "Int", SOCKADDRsize, "Int") ErrorMsg("bind()") SetTimer, Recv, 200 Return Recv: VarSetCapacity(Arg, A_PtrSize, 0) If DllCall("Ws2_32.dllioctlsocket", "Ptr", RecvSocket, "UInt", FIONREAD, "Ptr", &Arg, "Int") ErrorMsg("ioctlsocket()") If ((RecvLen := NumGet(Arg, "UInt")) > 0) { VarSetCapacity(Buffer, RecvLen, 0) VarSetCapacity(FromBuffer, 16, 0) FromBufferLen := 16 Result := DllCall("Ws2_32.dllrecvfrom", "Ptr", RecvSocket, "Ptr", &Buffer, "UInt", RecvLen , "UInt", 0, "Ptr", &FromBuffer, "IntP", FromBufferLen, "Int") ;ToolTip, %Result% ; add this line please If (Result = -1) ErrorMsg("recvfrom()") FromIP := "" Received := "" Received := StrGet(&Buffer, RecvLen, "CP0") If (StrLen(Received) = -128) Len := 2 Else If (Int = -32768) Len := 4 Else If (Int = -2147483648) Len := 8 Else Len := 16 Else If Typ Is Integer Len := Typ Else If !(Len := Types[Typ]) Return "" VarSetCapacity(Hex, 17