#include <MsgBoxConstants.au3>
#include <Array.au3>
#include <StructureConstants.au3>
#include <ListViewConstants.au3>
#include <FileConstants.au3>
#include <StaticConstants.au3>
#include <WinAPIEx.au3>
#include <AutoItConstants.au3>
#include <GUIConstantsEx.au3>
#include <TrayConstants.au3>
#include <file.au3>
#include <winapi.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <GuiListView.au3>
#include <GuiMenu.au3>
#include <Process.au3>
#include <WinAPIFiles.au3>
_WinAPI_Wow64EnableWow64FsRedirection(False)
Local $Cofing = @ScriptDir & "\wim\jydn\lan.ini", $fonts = "微软雅黑"
_skins3()
Local $tcpport = 8411, $tcpip = @IPAddress1
Local $_tcp_hsockets[1][10], $recvone = 0, $delsocket = -1, $connectedsocket, $recvtcp = 0
Local $tcprecvmode, $postsk, $mainstr = "####", $recvbtos, $recvold, $error
Local $mainsocket = TCPListen($tcpip, $tcpport)
Local $mht = GUICreate("远程控制", 326, 500)
Local $listview3 = GUICtrlCreateListView("", 10, 10, 306, 480)
_GUICtrlListView_SetTextBkColor($listview3, 6027594)
_GUICtrlListView_AddColumn($listview3, "", 0)
_GUICtrlListView_AddColumn($listview3, "Socket", 0)
_GUICtrlListView_AddColumn($listview3, "客户端名称", 145, 2)
_GUICtrlListView_AddColumn($listview3, "客户端IP地址", 145, 2)
$listMenu = GUICtrlCreateContextMenu($listview3)
$reboot= GUICtrlCreateMenuItem("重启客户端", $listMenu)
GUICtrlSetFont(-1, 9, 400, 1, $fonts)
$boot = GUICtrlCreateMenuItem("关闭客户端", $listMenu)
GUICtrlSetFont(-1, 9, 400, 1, $fonts)
$TightVNC= GUICtrlCreateMenuItem("连接客户端", $listMenu)
GUICtrlSetFont(-1, 9, 400, 1, $fonts)
GUISetState()
TCPStartup()
Local $mainsocket = TCPListen(IniRead($Cofing, "lan", "TCPIP ", ""), $tcpport)
GUIRegisterMsg($wm_command, "WM_NOTIFY")
MyTCP_Server($tcpip, $tcpport)
While 1
_tcprecv()
_while()
WEnd
Func _while()
$nmsg = GUIGetMsg()
Switch $nmsg
Case $gui_event_close, $idclose
Exit
EndSwitch
EndFunc ;==>_While
Func quit()
TCPShutdown()
Exit
EndFunc ;==>quit
Func wm_notify($hwnd, $imsg, $iwparam, $ilparam)
Local $hwndfrom
$hwndfrom = $ilparam
Switch $iwparam
Case $TightVNC
$index = ControlListView($mht, "", "[CLASS:SysListView32; INSTANCE:1]", "GetSelected", 3)
If $index <> "" Then
$ip = ControlListView($mht, "", "[CLASS:SysListView32; INSTANCE:1]", "GetText", $index, 3)
TrayTip("通知", " " &"正在连接" &"☛"& $ip , 1, 1)
Run(@ComSpec & " /c " & @ScriptDir & "\DYsoft\tvnviewer.exe" & " " & $ip, @ScriptDir, @SW_HIDE)
EndIf
Return True
Case $reboot
$index = ControlListView($mht, "", "[CLASS:SysListView32; INSTANCE:1]", "GetSelected", 3)
If $index <> "" Then
$ip = ControlListView($mht, "", "[CLASS:SysListView32; INSTANCE:1]", "GetText", $index, 3)
TrayTip("通知", " " &"正在重启" &"☛"& $ip , 1, 1)
Run(@ComSpec & ' /c ' & 'shutdown -m \\' & $ip & ' -r -f -t 0', '@ScriptDi', @SW_HIDE)
EndIf
Return True
Case $boot
$index = ControlListView($mht, "", "[CLASS:SysListView32; INSTANCE:1]", "GetSelected", 3)
If $index <> "" Then
$ip = ControlListView($mht, "", "[CLASS:SysListView32; INSTANCE:1]", "GetText", $index, 3)
TrayTip("通知", " " &"正在关机" &"☛"& $ip , 1, 1)
Run(@ComSpec & ' /c ' & 'shutdown -m \\' & $ip & ' -s -f -t 0', '@ScriptDi', @SW_HIDE)
EndIf
Return True
EndSwitch
EndFunc ;==>wm_notify
Func MyTCP_Server($tcpip, $tcpport)
Local $iListenSocket = TCPListen($tcpip, $tcpport , 250)
Local $iError = 0
If @error Then
$iError = @error
Return False
EndIf
Local $iSocket = 0
Do
$iSocket = TCPAccept($iListenSocket)
If @error Then
$iError = @error
Return False
EndIf
If GUIGetMsg() = $GUI_EVENT_CLOSE Then Return False
Until $iSocket <> -1
TCPCloseSocket($iListenSocket)
Local $sReceived = TCPRecv($iSocket, 4)
TCPCloseSocket($iSocket)
EndFunc ;==>MyTCP_Server
Func _tcprecv()
Local $regsocket = -1, $regip, $rdays
Dim $regsocket = TCPAccept($mainsocket)
If $regsocket <> -1 Then
Dim $recv_1 = TCPRecv($regsocket, 1024 * 1024, 1)
If @error Then
$error = Int(@error)
EndIf
If $recv_1 <> "" Then
$checkdata = StringLeft($recv_1, 12)
If $checkdata = "0x232323232B" Then
$regip = sockettoip($regsocket)
$recvbtos = BinaryToString($recv_1, 4)
$rdays = StringSplit($recvbtos, "+", 1)
If IsArray($rdays) Then
If UBound($rdays) > 3 Then
If StringUpper($rdays[4]) = StringUpper("SendName") Then
_socketact($regsocket, $regip, $rdays[5], "SendName")
Dim $onlinepclist = ""
For $i = 1 To UBound($_tcp_hsockets) - 1
$onlinepclist = $onlinepclist & $_tcp_hsockets[$i][0] & "|" & $_tcp_hsockets[$i][2] & ","
Next
EndIf
EndIf
EndIf
EndIf
EndIf
Else
If (UBound($_tcp_hsockets)) > 1 Then
For $i = 1 To UBound($_tcp_hsockets) - 1
Dim $recv_1 = TCPRecv($_tcp_hsockets[$i][0], 1024 * 1024, 1)
If @error Then
$error = Int(@error)
If $error = 10054 Then
If $_tcp_hsockets[$i][0] <> -1 Then
$delsocket = $_tcp_hsockets[$i][0]
TCPCloseSocket($_tcp_hsockets[$i][0])
EndIf
EndIf
EndIf
If $recv_1 <> "" Then
$postsk = $_tcp_hsockets[$i][0]
EndIf
Next
If $delsocket <> -1 Then
_tcp_server_broadcast($delsocket, "offline")
EndIf
EndIf
EndIf
EndFunc ;==>_tcprecv
Func _socketact($socketid = -1, $socketip = "", $socketname = "", $mode = "add")
If $socketid <> -1 And $socketip <> "" And $socketname <> "" Then
Dim $name_and_ip = $socketname & "|" & $socketip
Dim $so_name_and_ip = _ArrayFindAll($_tcp_hsockets, $socketid, 0, 0, 0, 0, 0)
If IsArray($so_name_and_ip) Then
TCPCloseSocket($_tcp_hsockets[$so_name_and_ip[0]][0])
$_tcp_hsockets[$so_name_and_ip[0]][0] = $socketid
$_tcp_hsockets[$so_name_and_ip[0]][3] = 1
Assign("GSocket" & $socketid, $so_name_and_ip[0], 2)
_tcp_server_broadcast($socketid, "ONLINE")
Else
Dim $recvubound = UBound($_tcp_hsockets)
ReDim $_tcp_hsockets[$recvubound + 1][10]
$_tcp_hsockets[$recvubound][0] = $socketid
$_tcp_hsockets[$recvubound][1] = $socketip
$_tcp_hsockets[$recvubound][2] = $name_and_ip
$_tcp_hsockets[$recvubound][3] = 1
Assign("GSocket" & $socketid, $recvubound, 2)
_tcp_server_broadcast($socketid, "ONLINE")
EndIf
EndIf
EndFunc ;==>_socketact
Func _tcp_server_broadcast($stext = "", $sendtype = "Msg")
If StringUpper($sendtype) = StringUpper("ONLINE") Or StringUpper($sendtype) = StringUpper("offline") Then
Dim $stexta = $_tcp_hsockets[Eval("GSocket" & $stext)][0] & "|" & $_tcp_hsockets[Eval("GSocket" & $stext)][2]
_clientline($stexta, $sendtype)
Else
Dim $stexta = $stext
EndIf
If (UBound($_tcp_hsockets)) > 1 Then
Dim $sendmsg = StringToBinary($mainstr & "++0+" & $sendtype & "+" & $stexta & ",+", 4)
For $i = 1 To UBound($_tcp_hsockets) - 1
If StringUpper($sendtype) = StringUpper("ONLINE") Or StringUpper($sendtype) = StringUpper("offline") Then
If UBound($_tcp_hsockets) > $i Then
If $_tcp_hsockets[$i][0] And $_tcp_hsockets[$i][0] <> $stext Then
TCPSend($_tcp_hsockets[$i][0], $sendmsg)
If @error Then
$error = Int(@error)
If $_tcp_hsockets[$i][0] <> -1 Then
$delsocket = $_tcp_hsockets[$i][0]
TCPCloseSocket($_tcp_hsockets[$i][0])
EndIf
If $delsocket <> -1 Then
_tcp_server_broadcast($delsocket, "offline")
EndIf
EndIf
EndIf
EndIf
Else
If $_tcp_hsockets[$i][0] Then
TCPSend($_tcp_hsockets[$i][0], $sendmsg)
If @error Then
$error = Int(@error)
If $_tcp_hsockets[$i][0] <> -1 Then
$delsocket = $_tcp_hsockets[$i][0]
TCPCloseSocket($_tcp_hsockets[$i][0])
If $delsocket <> -1 Then
_tcp_server_broadcast($delsocket, "offline")
EndIf
EndIf
EndIf
EndIf
EndIf
Next
If $delsocket <> -1 Then
_ArrayDelete($_tcp_hsockets, Eval("GSocket" & $delsocket))
Assign("GSocket" & $delsocket, -1, 2)
$delsocket = -1
EndIf
EndIf
EndFunc ;==>_tcp_server_broadcast
Func _clientline($sonlineipstr = "", $sonlinemode = "")
If $sonlineipstr <> "" Then
Dim $sonlinesp = StringSplit($sonlineipstr, "|", 1)
If IsArray($sonlinesp) Then
If UBound($sonlinesp) > 3 Then
Dim $sonlinesocket = $sonlinesp[1]
Dim $sonlinename = $sonlinesp[2]
Dim $sonlineip = $sonlinesp[3]
Dim $getitemcount = _GUICtrlListView_GetItemCount($listview3)
Dim $sonline_id = _GUICtrlListView_FindInText($listview3, $sonlinename & "|" & $sonlineip)
If $sonline_id <> -1 Then
If StringUpper($sonlinemode) = StringUpper("offline") Then
TrayTip("通知", " " & $sonlineipstr & "已断开", 1, 1)
_GUICtrlListView_DeleteItem(GUICtrlGetHandle($listview3), $sonline_id)
Else
TrayTip("通知", " " & $sonlinename & "已连接.", 1, 1)
_GUICtrlListView_SetItem($listview3, $sonlinesocket, $sonline_id, 1)
EndIf
Else
If StringUpper($sonlinemode) = StringUpper("ONLINE") Then
TrayTip("通知", " " & $sonlinename & "已连接.", 1, 1)
_GUICtrlListView_AddItem($listview3, $sonlinename & "|" & $sonlineip, $getitemcount)
_GUICtrlListView_AddSubItem($listview3, $getitemcount, $sonlinesocket, 1, 1)
_GUICtrlListView_AddSubItem($listview3, $getitemcount, $sonlinename, 2, 1)
_GUICtrlListView_AddSubItem($listview3, $getitemcount, $sonlineip, 3, 1)
EndIf
EndIf
EndIf
EndIf
EndIf
EndFunc ;==>_clientline
Func sockettoip($shocket)
Local $sockaddr, $aret
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
$aret = DllCall("Ws2_32.dll", "int", "getpeername", "int", $shocket, "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
If Not @error And $aret[0] = 0 Then
$aret = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
If Not @error Then $aret = $aret[0]
Else
$aret = 0
EndIf
$sockaddr = 0
Return $aret
EndFunc ;==>sockettoip
Func _skins3()
FileInstall("D:\au3\Skin\享受风格.she", @TempDir & "\1.she", 1)
FileInstall("d:\au3\skin\Skin.dll", @TempDir & "\Skin.dll", 1)
$skins = @TempDir & "\1.she"
$Dll = DllOpen(@TempDir & "\Skin.dll")
DllCall($Dll, "int", "SkinH_AttachEx", "str", $skins, "str", "mhgd")
FileDelete(@TempDir & "\Skin.dll")
FileDelete(@TempDir & "\1.she")
EndFunc ;==>_skins1