📄 动态取得win9598的网络邻居中的信息.htm
字号:
procedure TNetworkItems.SetItem(Index: Integer; Value: TNetworkItem); <br>
<br>
begin <br>
<br>
if (FList.Items[Index] <> nil) and (FList.Items[Index] <> Value) then <br>
<br>
TNetworkItem(FList.Items[Index]).Free; <br>
<br>
FList.Items[Index] := Value; <br>
<br>
end; <br>
<br>
function TNetworkItems.GetItem(Index: Integer): TNetworkItem; <br>
<br>
begin <br>
<br>
Result := TNetworkItem(FList.Items[Index]); <br>
<br>
end; <br>
<br>
procedure TNetworkItems.Clear; <br>
<br>
begin <br>
<br>
while Count > 0 do <br>
<br>
Delete(0); <br>
<br>
end; <br>
<br>
procedure TNetworkItems.Add(Item: TNetworkItem); <br>
<br>
begin <br>
<br>
FList.Add(Item); <br>
<br>
end; <br>
<br>
procedure TNetworkItems.Delete(Index: Integer); <br>
<br>
begin <br>
<br>
if FList.Items[Index] <> nil then <br>
<br>
TNetworkItem(FList.Items[Index]).Free; <br>
<br>
FList.Delete(Index); <br>
<br>
end; <br>
<br>
function TNetworkItems.GetCount: Integer; <br>
<br>
begin <br>
<br>
if FList <> nil then <br>
<br>
Result := FList.Count <br>
<br>
else <br>
<br>
Result := 0; <br>
<br>
end; <br>
<br>
{ TNetworkBrowser } <br>
<br>
constructor TNetworkBrowser.Create(AOwner: TComponent); <br>
<br>
begin <br>
<br>
inherited Create(AOwner); <br>
<br>
FItems := TNetworkItems.Create; <br>
<br>
FScope := nsGlobal; <br>
<br>
FResourceType := nrAny; <br>
<br>
FUsage := []; <br>
<br>
end; <br>
<br>
destructor TNetworkBrowser.Destroy; <br>
<br>
begin <br>
<br>
if FItems <> nil then <br>
<br>
FItems.Free; <br>
<br>
inherited; <br>
<br>
end; <br>
<br>
procedure TNetworkBrowser.EnumerateNet(NetItems: TNetworkItems; lpnr: <br>
<br>
PNetResource); <br>
<br>
var <br>
<br>
dwResult, dwResultEnum: Integer; <br>
<br>
hEnum: THandle; <br>
<br>
cbBuffer, cEntries, i: Integer; <br>
<br>
nrArray: PNetResourceArray; <br>
<br>
NewItem: TNetworkItem; <br>
<br>
dwScope, dwType, dwUsage: Integer; <br>
<br>
begin <br>
<br>
cbBuffer := 16384; <br>
<br>
cEntries := $FFFFFFFF; <br>
<br>
case FScope of <br>
<br>
nsConnected: dwScope := RESOURCE_CONNECTED; <br>
<br>
nsGlobal: dwScope := RESOURCE_GLOBALNET; <br>
<br>
nsRemembered: dwScope := RESOURCE_REMEMBERED; <br>
<br>
nsContext: dwScope := RESOURCE_CONTEXT; <br>
<br>
else <br>
<br>
dwScope := RESOURCE_GLOBALNET; <br>
<br>
end; <br>
<br>
case FResourceType of <br>
<br>
nrAny: dwType := RESOURCETYPE_ANY; <br>
<br>
nrDisk: dwType := RESOURCETYPE_DISK; <br>
<br>
nrPrint: dwType := RESOURCETYPE_PRINT; <br>
<br>
else <br>
<br>
dwType := RESOURCETYPE_ANY; <br>
<br>
end; <br>
<br>
dwUsage := 0; <br>
<br>
if nuConnectable in FUsage then <br>
<br>
dwUsage := dwUsage or RESOURCEUSAGE_CONNECTABLE; <br>
<br>
if nuContainer in FUsage then <br>
<br>
dwUsage := dwUsage or RESOURCEUSAGE_CONTAINER; <br>
<br>
dwResult := WNetOpenEnum(dwScope, dwType, dwUsage, lpnr, hEnum); <br>
<br>
if dwResult <> NO_ERROR then Exit; <br>
<br>
GetMem(nrArray, cbBuffer); <br>
<br>
repeat <br>
<br>
dwResultEnum := WNetEnumResource(hEnum, cEntries, nrArray, cbBuffer); <br>
<br>
if dwResultEnum = NO_ERROR then <br>
<br>
for i := 0 to cEntries-1 do <br>
<br>
begin <br>
<br>
NewItem := TNetworkItem.Create; <br>
<br>
case nrArray[i].dwScope of <br>
<br>
RESOURCE_CONNECTED: NewItem.FScope := nsConnected; <br>
<br>
RESOURCE_GLOBALNET: NewItem.FScope := nsGlobal; <br>
<br>
RESOURCE_REMEMBERED: NewItem.FScope := nsRemembered; <br>
<br>
RESOURCE_CONTEXT: NewItem.FScope := nsContext; <br>
<br>
else <br>
<br>
NewItem.FScope := nsGlobal; <br>
<br>
end; <br>
<br>
case nrArray[i].dwType of <br>
<br>
RESOURCETYPE_ANY: NewItem.FResourceType := nrAny; <br>
<br>
RESOURCETYPE_DISK: NewItem.FResourceType := nrDisk; <br>
<br>
RESOURCETYPE_PRINT: NewItem.FResourceType := nrPrint; <br>
<br>
else <br>
<br>
NewItem.FResourceType := nrAny; <br>
<br>
end; <br>
<br>
case nrArray[i].dwDisplayType of <br>
<br>
RESOURCEDISPLAYTYPE_GENERIC: NewItem.FDisplay := ndGeneric; <br>
<br>
RESOURCEDISPLAYTYPE_DOMAIN: NewItem.FDisplay := ndDomain; <br>
<br>
RESOURCEDISPLAYTYPE_SERVER: NewItem.FDisplay := ndServer; <br>
<br>
RESOURCEDISPLAYTYPE_SHARE: NewItem.FDisplay := ndShare; <br>
<br>
RESOURCEDISPLAYTYPE_FILE: NewItem.FDisplay := ndFile; <br>
<br>
RESOURCEDISPLAYTYPE_GROUP: NewItem.FDisplay := ndGroup; <br>
<br>
RESOURCEDISPLAYTYPE_NETWORK: NewItem.FDisplay := ndNetwork; <br>
<br>
RESOURCEDISPLAYTYPE_ROOT: NewItem.FDisplay := ndRoot; <br>
<br>
RESOURCEDISPLAYTYPE_SHAREADMIN: NewItem.FDisplay := <br>
<br>
ndShareAdmin; <br>
<br>
RESOURCEDISPLAYTYPE_DIRECTORY: NewItem.FDisplay := <br>
<br>
ndDirectory; <br>
<br>
RESOURCEDISPLAYTYPE_TREE: NewItem.FDisplay := ndTree; <br>
<br>
RESOURCEDISPLAYTYPE_NDSCONTAINER: NewItem.FDisplay := <br>
<br>
ndNDSContainer; <br>
<br>
else <br>
<br>
NewItem.FDisplay := ndGeneric; <br>
<br>
end; <br>
<br>
NewItem.FUsage := []; <br>
<br>
if nrArray[i].dwUsage and RESOURCEUSAGE_CONNECTABLE <> 0 then <br>
<br>
Include(NewItem.FUsage, nuConnectable); <br>
<br>
if nrArray[i].dwUsage and RESOURCEUSAGE_CONTAINER <> 0 then <br>
<br>
Include(NewItem.FUsage, nuContainer); <br>
<br>
NewItem.FLocalName := StrPas(nrArray[i].lpLocalName); <br>
<br>
NewItem.FRemoteName := StrPas(nrArray[i].lpRemoteName); <br>
<br>
NewItem.FComment := StrPas(nrArray[i].lpComment); <br>
<br>
NewItem.FProvider := StrPas(nrArray[i].lpProvider); <br>
<br>
NetItems.Add(NewItem); <br>
<br>
// if container, call recursively <br>
<br>
if (nuContainer in NewItem.FUsage) and (FScope <> nsContext) then <br>
<br>
EnumerateNet(NewItem.FSubItems, @nrArray[i]) <br>
<br>
end; <br>
<br>
until dwResultEnum = ERROR_NO_MORE_ITEMS; <br>
<br>
FreeMem(nrArray); <br>
<br>
WNetCloseEnum(hEnum); <br>
<br>
end; <br>
<br>
procedure TNetworkBrowser.Refresh; <br>
<br>
begin <br>
<br>
FItems.Clear; <br>
<br>
if FActive then <br>
<br>
EnumerateNet(FItems, nil); <br>
<br>
end; <br>
<br>
procedure TNetworkBrowser.SetActive(Value: Boolean); <br>
<br>
begin <br>
<br>
if Value <> FActive then <br>
<br>
begin <br>
<br>
FActive := Value; <br>
<br>
Refresh; <br>
<br>
end; <br>
<br>
end; <br>
<br>
procedure TNetworkBrowser.SetScope(Value: TNetScope); <br>
<br>
begin <br>
<br>
if Value <> FScope then <br>
<br>
begin <br>
<br>
FScope := Value; <br>
<br>
Refresh; <br>
<br>
end; <br>
<br>
end; <br>
<br>
procedure TNetworkBrowser.SetResourceType(Value: TNetResourceType); <br>
<br>
begin <br>
<br>
if Value <> FResourceType then <br>
<br>
begin <br>
<br>
FResourceType := Value; <br>
<br>
Refresh; <br>
<br>
end; <br>
<br>
end; <br>
<br>
procedure TNetworkBrowser.SetUsage(Value: TNetUsage); <br>
<br>
begin <br>
<br>
if Value <> FUsage then <br>
<br>
begin <br>
<br>
FUsage := Value; <br>
<br>
Refresh; <br>
<br>
end; <br>
<br>
end; <br>
<br>
procedure TNetworkBrowser.Open; <br>
<br>
begin <br>
<br>
Active := True; <br>
<br>
end; <br>
<br>
procedure TNetworkBrowser.Close; <br>
<br>
begin <br>
<br>
Active := False; <br>
<br>
end; <br>
<br>
end.
</TD>
</TR>
<TR vAlign=top> </TR>
</TBODY>
</TABLE>
</TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
</TBODY>
</TABLE>
<TABLE align=center border=0 cellPadding=0 cellSpacing=1 width=755>
<TBODY>
<TR bgColor=#000000>
<TD align=middle colSpan=4 height=2 vAlign=top></TD>
</TR>
</TBODY>
</TABLE>
<script src="../footnote.js" class="Small" ></script>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -