Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Поиск компьютеров в локальной сети и отображение их в виде дерева. (http://forum.oszone.net/showthread.php?t=252661)

Pavluha 29-01-2013 19:53 2077978

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

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

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

Как это сделать?

Pavluha 30-01-2013 11:06 2078337

Код:

#include <GuiTreeView.au3>
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

Сам начал тему, сам и закончил) Основу взял отсюда: http://forum.oszone.net/post-1509068-9.html


Время: 17:57.

Время: 17:57.
© OSzone.net 2001-