[решено] Поиск компьютеров в локальной сети и отображение их в виде дерева.

Ответить
Аватара пользователя
Pavluha

[решено] Поиск компьютеров в локальной сети и отображение их в виде дерева.

Сообщение Pavluha »

Здравствуйте. Допустим, у меня в локальной сети около 50 компьютеров и в один момент нужно узнать, какие из них онлайн и, если онлайн, скачать с одного из них (какой мне будет нужен) файл "D:\pic.png".



Список компьютеров нужно отобразить в виде дерева, который бы показывал не только имена компьютеров онлайн, а также группу (и подгруппу, если есть) к которой он относится.



Проблема в том, что не все компьютеры могут быть онлайн и кто-то может сменить имя компьютера, а также его ип адрес в локальной сети.



Как это сделать?
Аватара пользователя
Pavluha

Re: [решено] Поиск компьютеров в локальной сети и отображение их в виде дерева.

Сообщение Pavluha »

Код:

Код: Выделить всё

#include 
AutoItSetOption("MustDeclareVars", 1)
Global $hMainWnd, $hTreeView,$hTreeViewComp[256][2],$i,$j
$hMainWnd = GUICreate("Локальная сеть",500,300)
$hTreeView = GUICtrlCreateTreeView(10,10,480,280)
$i = 3 ;кол-во хандлов до функции
GUISetState ()
_Start()
_GUICtrlTreeView_Expand ($hTreeView)
While 1
    Switch GUIGetMsg($hMainWnd)
        Case 0
            ContinueLoop
        Case -3
            ExitLoop
        Case GUICtrlRead($hTreeView)
            If MsgBox(4,'Вопрос:','Вы действительно хотите скачать файл D:\pic.png с компьютера ' & $hTreeViewComp[GuiCtrlRead($hTreeView)][1])=6 Then
                FileCopy($hTreeViewComp[GuiCtrlRead($hTreeView)][1] & "\d\pic.png",@ScriptDir & '\pic.png')
            EndIf
    EndSwitch
WEnd
Func _Start ()
Local $oShell = ObjCreate("Shell.Application")
Local $oFolder_Network
Local $oFolder_EntireNetwork
Local $objFolder_MSNetwork
Local $oFolder_Domain
Local $oFolder_MachineName
Local $oFolderItem
Local $oFolderItem_Domain
Local $oFolderItem_MachineName
; Получение папки "Сетевое окружение"
$oFolder_Network       = $oShell.NameSpace("::{208D2C60-3AEA-1069-A2D7-08002B30309D}")
; Получение папки "Вся сеть"
$oFolder_EntireNetwork = $oFolder_Network.Items().Item("EntireNetwork").GetFolder
; Получение папки "Microsoft Windows Network"
For $oFolderItem In $oFolder_EntireNetwork.Items()
    If $oFolderItem.Name = "Microsoft Windows Network" Then
        $objFolder_MSNetwork = $oFolderItem.GetFolder
        If IsObj($objFolder_MSNetwork) Then
            ; Перебор доменов и рабочих групп
            For $oFolderItem_Domain In $objFolder_MSNetwork.Items()
                If $oFolderItem_Domain.IsFolder Then
                    $i+=1
                    $j=$i
                    $hTreeViewComp[$i][0] = GUICtrlCreateTreeViewItem($oFolderItem_Domain.Path & " [" & $oFolderItem_Domain.Name & "]",$hTreeView)
                    $hTreeViewComp[$i][1] = $oFolderItem_Domain.Path
                    $oFolder_Domain = $oFolderItem_Domain.GetFolder
                    If IsObj($oFolder_Domain) Then
                        ; Перебор компьютеров
                        For $oFolderItem_MachineName In $oFolder_Domain.Items()
                            $i+=1
                            $hTreeViewComp[$i][0] = GUICtrlCreateTreeViewItem($oFolderItem_MachineName.Path & " [" & $oFolderItem_MachineName.Name & "]",$hTreeViewComp[$j][0])
                            $hTreeViewComp[$i][1] = $oFolderItem_MachineName.Path
                        Next
                    Else
                        ConsoleWriteError(@TAB & "Can't connect to [" & $oFolderItem_Domain.Name & "]" & @CRLF)
                    EndIf
                EndIf
            Next
        Else
            ConsoleWriteError(@TAB & "Can't find [Microsoft Windows Network]" & @CRLF)
        EndIf
        ExitLoop
    EndIf
Next
EndFunc

Сам начал тему, сам и закончил) Основу взял отсюда:
Список ПК из сетевого окружения
Ответить

Вернуться в «AutoIt»