3
0

这个点击 时如何启动后自动连接"客户端IP“

Au3编程学习2022-10-29 16:40重庆
4013
Case $TightVNC  这个点击 时如何启动后自动连接"客户端IP地址上的IP地址客户端的机器

Region ;**** 由 AccAu3Wrapper_GUI 创建指令 ****
#AccAu3Wrapper_Icon=3.ico
#AccAu3Wrapper_Outfile=C:\Users\Administrator\Desktop\TCP.exe
#AccAu3Wrapper_UseX64=n
#AccAu3Wrapper_Res_Language=2052
#AccAu3Wrapper_Res_requestedExecutionLevel=None
#EndRegion ;**** 由 AccAu3Wrapper_GUI 创建指令 ****
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <GUIConstantsEx.au3>
#include <Array.au3>
#include <WinAPIEx.au3>
#include <TrayConstants.au3>
#include <GuiMenu.au3>
_skins3()
_WinAPI_Wow64EnableWow64FsRedirection(False)
Global Enum $CQBOOT = 1000, $TightVNC
Local $TCPIP = IniRead(@ScriptDir & "\LAN.ini", "lan", "TCPIP ", "")
Local $TCPPort = 8411
TCPStartup()
Local $TCP = GUICreate("服务端", 298, 308)
Local $recv, $_TCP_HSOCKETS[1][10], $delSocket = -1, $MainStr = "####"
Local $MainSocket = TCPListen($TCPIP, $TCPPort)
Local $ListView3 = GUICtrlCreateListView("", 10, 5, 278, 306, -1, $LVS_EX_GRIDLINES + $LVS_EX_FULLROWSELECT)
_GUICtrlListView_SetTextBkColor($ListView3, 0x80FF00)
_GUICtrlListView_AddColumn($ListView3, "", 0)
_GUICtrlListView_AddColumn($ListView3, "Socket", 0)
_GUICtrlListView_AddColumn($ListView3, "客户端名称", 120, 0)
_GUICtrlListView_AddColumn($ListView3, "客户端IP地址", 152, 0)
;~ _GUICtrlListView_AddColumn($ListView3, "序号", 50)
GUICtrlSetTip(-1, "右键菜单:远程重启、远程控制")
GUICtrlSetFont(-1, 10, 400, 1, "微软雅黑")
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")
While 1
_TCPRecv()
_While()
WEnd
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom
$hWndFrom = $ilParam
Switch $iwParam
Case $CQBOOT
Run(@ComSpec & ' /c ' & 'shutdown -m \\' & $ilParam & '-r -f -t 0', '', @SW_HIDE)
Case $TightVNC
FileInstall("d:\au3\TightVNC.exe", @ScriptDir & "\", 1)
Run(@ScriptDir & "\TightVNC.exe")
;~ Sleep(200)
;~ WinActivate("新建 TightVNC 连接")
;~ ControlSetText("新建 TightVNC 连接", "ComboBox", "comboBox1", $ilParam)
;~ Sleep(200)
;~ ControlClick("新建 TightVNC 连接", "Button", "Button4")
;~ Send("{ENTER}")
EndSwitch
EndFunc   ;==>WM_COMMAND

Func WM_CONTEXTMENU($hWnd, $iMsg, $iwParam, $ilParam)
Local $hMenu
$hMenu = _GUICtrlMenu_CreatePopup($MNS_AUTODISMISS )
_GUICtrlMenu_InsertMenuItem($hMenu, 0, "远程重启", $CQBOOT)
_GUICtrlMenu_InsertMenuItem($hMenu, 1, "远程控制", $TightVNC)
_GUICtrlMenu_TrackPopupMenu($hMenu, $hWnd)
_GUICtrlMenu_DestroyMenu($hMenu)
Return True
EndFunc   ;==>WM_CONTEXTMENU
Func _While()
Dim $msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Quit()
EndSwitch
EndFunc   ;==>_While

Func Quit()
TCPShutdown()
Exit
EndFunc   ;==>Quit

Func _TCPRecv()
Local $RegSocket = -1, $RegIp, $rDays
Dim $RegSocket = TCPAccept($MainSocket)
If $RegSocket <> -1 Then
Dim $recv_1 = TCPRecv($RegSocket, 1024 * 1024, 1)
If $recv_1 <> "" Then
$checkData = StringLeft($recv_1, 12)
$RegIp = SocketToIP($RegSocket)
$recvBtoS = BinaryToString($recv_1, 4)
$rDays = StringSplit($recvBtoS, "+", 1)
_SocketAct($RegSocket, $RegIp, $rDays[5], "SendName")
EndIf
EndIf
If $delSocket <> -1 Then
_TCP_Server_Broadcast($delSocket, "offline")
EndIf
EndFunc   ;==>_TCPRecv

Func _SocketAct($Socketid = -1, $Socketip = "", $SocketName = "", $mode = "add")
Dim $name_and_ip = $SocketName & "|" & $Socketip
Dim $RecvUBound = UBound($_TCP_HSOCKETS)
ReDim $_TCP_HSOCKETS[$RecvUBound + 1][10]
$_TCP_HSOCKETS[$RecvUBound][2] = $name_and_ip
Assign("GSocket" & $Socketid, $RecvUBound, 2)
_TCP_Server_Broadcast($Socketid, "ONLINE")
EndFunc   ;==>_SocketAct

Func _TCP_Server_Broadcast($sText = "", $SendType = "Msg")
Dim $sTextA = $_TCP_HSOCKETS[Eval("GSocket" & $sText)][0] & "|" & $_TCP_HSOCKETS[Eval("GSocket" & $sText)][2]
_Clientline($sTextA, $SendType)
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('通知', " " & $sONLINEIP & '已断开', 3, 1)
_GUICtrlListView_DeleteItem(GUICtrlGetHandle($ListView3), $sONLINE_ID)
Else
_GUICtrlListView_SetItem($ListView3, $sONLINESocket, $sONLINE_ID, 1)
EndIf
Else
TrayTip('通知', " " & $sONLINEIP & '已连接', 3, 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
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

全部回复 3
www8899

主题: 54

回复: 171

关注: 0

粉丝: 2

TA 的积分
  • 1744
  • 84
  • 0