• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        動態取得網絡鄰居的工作組與計算機名

        動態取得網絡鄰居的工作組與計算機名

        更新時間:2022-04-26 文章作者:未知 信息來源:網絡 閱讀次數:

        如何在程序中動態取得Win95/98的網絡鄰居中的工作組及計算機名?  
        可參考下面代碼,或許有所幫助:  
        procedure GetDomainList(TV:TTreeView);  
        var  
        a : Integer;  
        ErrCode : Integer;  
        NetRes : Array[0..1023] of TNetResource;  
        EnumHandle : THandle;  
        EnumEntries : DWord;  
        BufferSize : DWord;  
        s : string;  
        itm : TTreeNode;  
        begin  
        { Start here }  
        try  
        With NetRes[0] do begin  
        dwScope :=RESOURCE_GLOBALNET;  
        dwType :=RESOURCETYPE_ANY;  
        dwDisplayType :=RESOURCEDISPLAYTYPE_DOMAIN;  
        dwUsage :=RESOURCEUSAGE_CONTAINER;  
        lpLocalName :=NIL;  
        lpRemoteName :=NIL;  
        lpComment :=NIL;  
        lpProvider :=NIL;  
        end;  
        { get net root }  
        ErrCode:=WNetOpenEnum(  
        RESOURCE_GLOBALNET,  
        RESOURCETYPE_ANY,  
        RESOURCEUSAGE_CONTAINER,  
        @NetRes[0],  
        EnumHandle  
        );  
        If ErrCode=NO_ERROR then begin  
        EnumEntries:=1;  
        BufferSize:=SizeOf(NetRes);  
        ErrCode:=WNetEnumResource(  
        EnumHandle,  
        EnumEntries,  
        @NetRes[0],  
        BufferSize  
        );  
        WNetCloseEnum(EnumHandle);  
        ErrCode:=WNetOpenEnum(  
        RESOURCE_GLOBALNET,  
        RESOURCETYPE_ANY,  
        RESOURCEUSAGE_CONTAINER,  
        @NetRes[0],  
        EnumHandle  
        );  
        EnumEntries:=1024;  
        BufferSize:=SizeOf(NetRes);  
        ErrCode:=WNetEnumResource(  
        EnumHandle,  
        EnumEntries,  
        @NetRes[0],  
        BufferSize  
        );  
        IF ErrCode=No_Error then with TV do try  
        a:=0;  
        Items.BeginUpDate;  
        Items.Clear;  
        Itm:=Items.Add(TV.Selected,string(NetRes[0].lpProvider));  
        Itm.ImageIndex:=0;  
        Itm.SelectedIndex:=0;  
        { get domains }  
        下面的一個單元定義了一個組件. TNetworkBrowser, 可以枚舉hierachical樹上所有  
        的網絡資源. 實際上瀏覽是要花費很長時間的,這您可以通過在WINDOWS資源管理器  
        中打開"整個網絡" 來比較一下. 如果你設置SCOPE屬性 為nsContext , 你就可以看到  
        和網絡鄰居中一樣的機器列表.  
        unit NetBrwsr;  
        interface  
        uses  
        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;  
        type  
        TNetScope = (nsConnected, nsGlobal, nsRemembered, nsContext);  
        TNetResourceType = (nrAny, nrDisk, nrPrint);  
        TNetDisplay = (ndDomain, ndGeneric, ndServer, ndShare, ndFile, ndGroup,  
        ndNetwork, ndRoot, ndShareAdmin, ndDirectory, ndTree, ndNDSContainer);  
        TNetUsage = set of (nuConnectable, nuContainer);  
        TNetworkItems = class;  
        TNetworkItem = class  
        private  
        FScope: TNetScope;  
        FResourceType: TNetResourceType;  
        FDisplay: TNetDisplay;  
        FUsage: TNetUsage;  
        FLocalName: string;  
        FRemoteName: string;  
        FComment: string;  
        FProvider: string;  
        FSubItems: TNetworkItems;  
        public  
        constructor Create;  
        destructor Destroy; override;  
        property Scope: TNetScope read FScope;  
        property ResourceType: TNetResourceType read FResourceType;  
        property Display: TNetDisplay read FDisplay;  
        property Usage: TNetUsage read FUsage;  
        property LocalName: string read FLocalName;  
        property RemoteName: string read FRemoteName;  
        property Comment: string read FComment;  
        property Provider: string read FProvider;  
        property SubItems: TNetworkItems read FSubItems;  
        end;  
        TNetworkItems = class  
        private  
        FList: TList;  
        procedure SetItem(Index: Integer; Value: TNetworkItem);  
        function GetItem(Index: Integer): TNetworkItem;  
        function GetCount: Integer;  
        public  
        constructor Create;  
        destructor Destroy; override;  
        procedure Clear;  
        procedure Add(Item: TNetworkItem);  
        procedure Delete(Index: Integer);  
        property Items[Index: Integer]: TNetworkItem read GetItem write  
        SetItem; default;  
        property Count: Integer read GetCount;  
        end;  
        TNetworkBrowser = class(TComponent)  
        private  
        FItems: TNetworkItems;  
        FScope: TNetScope;  
        FResourceType: TNetResourceType;  
        FUsage: TNetUsage;  
        FActive: Boolean;  
        procedure Refresh;  
        procedure SetActive(Value: Boolean);  
        procedure SetScope(Value: TNetScope);  
        procedure SetResourceType(Value: TNetResourceType);  
        procedure SetUsage(Value: TNetUsage);  
        procedure EnumerateNet(NetItems: TNetworkItems; lpnr: PNetResource);  
        protected  
        public  
        constructor Create(AOwner: TComponent); override;  
        destructor Destroy; override;  
        procedure Open;  
        procedure Close;  
        property Items: TNetworkItems read FItems;  
        published  
        property Scope: TNetScope read FScope write SetScope default nsGlobal;  
        property ResourceType: TNetResourceType read FResourceType  
        write SetResourceType default nrAny;  
        property Usage: TNetUsage read FUsage write SetUsage default [];  
        property Active: Boolean read FActive write SetActive default False;  
        end;  
        implementation  
        type  
        PNetResourceArray = ^TNetResourceArray;  
        TNetResourceArray = array[0..0] of TNetResource;  
        { TNetworkItem }  
        constructor TNetworkItem.Create;  
        begin  
        inherited;  
        FSubItems := TNetworkItems.Create;  
        end;  
        destructor TNetworkItem.Destroy;  
        begin  
        if FSubItems <> nil then  
        FSubItems.Free;  
        inherited;  
        end;  
        { TNetworkItems }  
        constructor TNetworkItems.Create;  
        begin  
        inherited;  
        FList := TList.Create;  
        end;  
        destructor TNetworkItems.Destroy;  
        begin  
        Clear;  
        if FList <> nil then  
        FList.Free;  
        inherited;  
        end;  
        procedure TNetworkItems.SetItem(Index: Integer; Value: TNetworkItem);  
        begin  
        if (FList.Items[Index] <> nil) and (FList.Items[Index] <> Value) then  
        TNetworkItem(FList.Items[Index]).Free;  
        FList.Items[Index] := Value;  
        end;  
        function TNetworkItems.GetItem(Index: Integer): TNetworkItem;  
        begin  
        Result := TNetworkItem(FList.Items[Index]);  
        end;  
        procedure TNetworkItems.Clear;  
        begin  
        while Count > 0 do  
        Delete(0);  
        end;  
        procedure TNetworkItems.Add(Item: TNetworkItem);  
        begin  
        FList.Add(Item);  
        end;  
        procedure TNetworkItems.Delete(Index: Integer);  
        begin  
        if FList.Items[Index] <> nil then  
        TNetworkItem(FList.Items[Index]).Free;  
        FList.Delete(Index);  
        end;  
        function TNetworkItems.GetCount: Integer;  
        begin  
        if FList <> nil then  
        Result := FList.Count  
        else  
        Result := 0;  
        end;  
        { TNetworkBrowser }  
        constructor TNetworkBrowser.Create(AOwner: TComponent);  
        begin  
        inherited Create(AOwner);  
        FItems := TNetworkItems.Create;  
        FScope := nsGlobal;  
        FResourceType := nrAny;  
        FUsage := [];  
        end;  
        destructor TNetworkBrowser.Destroy;  
        begin  
        if FItems <> nil then  
        FItems.Free;  
        inherited;  
        end;  
        procedure TNetworkBrowser.EnumerateNet(NetItems: TNetworkItems; lpnr:  
        PNetResource);  
        var  
        dwResult, dwResultEnum: Integer;  
        hEnum: THandle;  
        cbBuffer, cEntries, i: Integer;  
        nrArray: PNetResourceArray;  
        NewItem: TNetworkItem;  
        dwScope, dwType, dwUsage: Integer;  
        begin  
        cbBuffer := 16384;  
        cEntries := $FFFFFFFF;  
        case FScope of  
        nsConnected: dwScope := RESOURCE_CONNECTED;  
        nsGlobal: dwScope := RESOURCE_GLOBALNET;  
        nsRemembered: dwScope := RESOURCE_REMEMBERED;  
        nsContext: dwScope := RESOURCE_CONTEXT;  
        else  
        dwScope := RESOURCE_GLOBALNET;  
        end;  
        case FResourceType of  
        nrAny: dwType := RESOURCETYPE_ANY;  
        nrDisk: dwType := RESOURCETYPE_DISK;  
        nrPrint: dwType := RESOURCETYPE_PRINT;  
        else  
        dwType := RESOURCETYPE_ANY;  
        end;  
        dwUsage := 0;  
        if nuConnectable in FUsage then  
        dwUsage := dwUsage or RESOURCEUSAGE_CONNECTABLE;  
        if nuContainer in FUsage then  
        dwUsage := dwUsage or RESOURCEUSAGE_CONTAINER;  
        dwResult := WNetOpenEnum(dwScope, dwType, dwUsage, lpnr, hEnum);  
        if dwResult <> NO_ERROR then Exit;  
        GetMem(nrArray, cbBuffer);  
        repeat  
        dwResultEnum := WNetEnumResource(hEnum, cEntries, nrArray, cbBuffer);  
        if dwResultEnum = NO_ERROR then  
        for i := 0 to cEntries-1 do  
        begin  
        NewItem := TNetworkItem.Create;  
        case nrArray[i].dwScope of  
        RESOURCE_CONNECTED: NewItem.FScope := nsConnected;  
        RESOURCE_GLOBALNET: NewItem.FScope := nsGlobal;  
        RESOURCE_REMEMBERED: NewItem.FScope := nsRemembered;  
        RESOURCE_CONTEXT: NewItem.FScope := nsContext;  
        else  
        NewItem.FScope := nsGlobal;  
        end;  
        case nrArray[i].dwType of  
        RESOURCETYPE_ANY: NewItem.FResourceType := nrAny;  
        RESOURCETYPE_DISK: NewItem.FResourceType := nrDisk;  
        RESOURCETYPE_PRINT: NewItem.FResourceType := nrPrint;  
        else  
        NewItem.FResourceType := nrAny;  
        end;  
        case nrArray[i].dwDisplayType of  
        RESOURCEDISPLAYTYPE_GENERIC: NewItem.FDisplay := ndGeneric;  
        RESOURCEDISPLAYTYPE_DOMAIN: NewItem.FDisplay := ndDomain;  
        RESOURCEDISPLAYTYPE_SERVER: NewItem.FDisplay := ndServer;  
        RESOURCEDISPLAYTYPE_SHARE: NewItem.FDisplay := ndShare;  
        RESOURCEDISPLAYTYPE_FILE: NewItem.FDisplay := ndFile;  
        RESOURCEDISPLAYTYPE_GROUP: NewItem.FDisplay := ndGroup;  
        RESOURCEDISPLAYTYPE_NETWORK: NewItem.FDisplay := ndNetwork;  
        RESOURCEDISPLAYTYPE_ROOT: NewItem.FDisplay := ndRoot;  
        RESOURCEDISPLAYTYPE_SHAREADMIN: NewItem.FDisplay :=  
        ndShareAdmin;  
        RESOURCEDISPLAYTYPE_DIRECTORY: NewItem.FDisplay :=  
        ndDirectory;  
        RESOURCEDISPLAYTYPE_TREE: NewItem.FDisplay := ndTree;  
        RESOURCEDISPLAYTYPE_NDSCONTAINER: NewItem.FDisplay :=  
        ndNDSContainer;  
        else  
        NewItem.FDisplay := ndGeneric;  
        end;  
        NewItem.FUsage := [];  
        if nrArray[i].dwUsage and RESOURCEUSAGE_CONNECTABLE <> 0 then  
        Include(NewItem.FUsage, nuConnectable);  
        if nrArray[i].dwUsage and RESOURCEUSAGE_CONTAINER <> 0 then  
        Include(NewItem.FUsage, nuContainer);  
        NewItem.FLocalName := StrPas(nrArray[i].lpLocalName);  
        NewItem.FRemoteName := StrPas(nrArray[i].lpRemoteName);  
        NewItem.FComment := StrPas(nrArray[i].lpComment);  
        NewItem.FProvider := StrPas(nrArray[i].lpProvider);  
        NetItems.Add(NewItem);  
        // if container, call recursively  
        if (nuContainer in NewItem.FUsage) and (FScope <> nsContext) then  
        EnumerateNet(NewItem.FSubItems, @nrArray[i])  
        end;  
        until dwResultEnum = ERROR_NO_MORE_ITEMS;  
        FreeMem(nrArray);  
        WNetCloseEnum(hEnum);  
        end;  
        procedure TNetworkBrowser.Refresh;  
        begin  
        FItems.Clear;  
        if FActive then  
        EnumerateNet(FItems, nil);  
        end;  
        procedure TNetworkBrowser.SetActive(Value: Boolean);  
        begin  
        if Value <> FActive then  
        begin  
        FActive := Value;  
        Refresh;  
        end;  
        end;  
        procedure TNetworkBrowser.SetScope(Value: TNetScope);  
        begin  
        if Value <> FScope then  
        begin  
        FScope := Value;  
        Refresh;  
        end;  
        end;  
        procedure TNetworkBrowser.SetResourceType(Value: TNetResourceType);  
        begin  
        if Value <> FResourceType then  
        begin  
        FResourceType := Value;  
        Refresh;  
        end;  
        end;  
        procedure TNetworkBrowser.SetUsage(Value: TNetUsage);  
        begin  
        if Value <> FUsage then  
        begin  
        FUsage := Value;  
        Refresh;  
        end;  
        end;  
        procedure TNetworkBrowser.Open;  
        begin  
        Active := True;  
        end;  
        procedure TNetworkBrowser.Close;  
        begin  
        Active := False;  
        end;  
        end.

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 免费被黄网站在观看| 无码区日韩特区永久免费系列| 成年女人永久免费观看片| 亚洲日本久久一区二区va| 日本精品人妻无码免费大全| 亚洲一区动漫卡通在线播放| 99久久免费国产精品特黄| 亚洲日韩国产精品乱-久| 全免费一级毛片在线播放| 欧美亚洲精品一区二区| 免费一区二区视频| 国产特黄特色的大片观看免费视频| 久久精品国产亚洲5555| 国产精品白浆在线观看免费| 久久亚洲中文字幕精品有坂深雪| 91精品视频免费| 亚洲精品无码少妇30P| 亚洲国产电影av在线网址| 91免费福利视频| 91亚洲导航深夜福利| 69成人免费视频无码专区| 免费一级全黄少妇性色生活片| 亚洲日韩国产成网在线观看| 国产日韩一区二区三免费高清| 久久精品国产亚洲av日韩| 国产在线观看片a免费观看| 国产精品亚洲一区二区三区久久 | 亚洲最大在线视频| 在线成人a毛片免费播放| 日韩精品免费一线在线观看| 亚洲成人免费在线| 日韩一品在线播放视频一品免费| 国产久爱免费精品视频| 亚洲国产精品日韩在线| 日产国产精品亚洲系列| 7m凹凸精品分类大全免费| 亚洲AV无码一区二区大桥未久| 亚洲欧洲无码AV电影在线观看| 国产精品美女午夜爽爽爽免费| 一级全免费视频播放| 亚洲人成在线播放|