dj
Nybegynder
26. februar 2001 - 10:05
Der er
5 kommentarer og
1 løsning
Windows Network - Shared Folders
Hejsa
Tjah .. jeg er løbet ind i lidt af et problem, jeg skal finde ud hvilke mapper en maskine på netværket har udbudt.
Dvs. jeg skal bruge en procedure noget lignende
Procedure GetSharedFolders(User: String; Folders: Tstrings);
Håber der er nogen der kan hjælpe.
Mvh. _DJ_
dj
Nybegynder
26. februar 2001 - 10:09
#2
hehe jeg vidste jeg skulle have kigget din side igennem først :P
nåh.. jeg ser lige på det, om det er det jeg skal bruge :)
dj
Nybegynder
26. februar 2001 - 10:43
#3
Det ser jo ganske fornuftigt ud, bortset fra at jeg ikke har arbejdet ret meget med TTreeList.
Hvis jeg nu har et netværk der ser sådan her ud:
\\
- Workgroup
- \\\\_DJ_
- \\\\_DJ_\\Upload
Hvordan kan jeg så vide at \\\\_DJ_\\Upload hører til under _DJ_ som igen hører til under Workgroup?
Er der en eller anden form for GetParentNode eller noget ? :)
Mvh.
_DJ_
26. februar 2001 - 11:00
#4
Hej _DC_
Du kan naturligvis benytte sig af GetParentNode ... Ellers står det jo allerede i din streng :
\\\\_DJ_\\Upload
\\\\ betyder nu kommer der et computer navn ....
Hvis du skal bruge det som tekst og ikke i et træ så prøv den her :
procedure EnumRemoteDrives(Items: TStrings);
Function EnumerateFunc(lpnr: PNetResource; Items: TStrings; DrillDepth: Integer): Boolean;
var
lpnrLocal: PNetResource;
hEnum : THandle;
dwResult, dwResultEnum, cbBuffer, cEntries: DWORD;
i: Integer;
p1: PChar;
p2: pNetResource;
s, t: String;
begin
dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, lpnr, hEnum);
if dwResult <> NO_ERROR then
begin
EnumerateFunc := False;
exit;
end;
cbBuffer := 32768;
cEntries := $FFFFFFFF;
lpnrLocal := PNetResource(GlobalAlloc(GPTR,cbBuffer));
repeat
dwResultEnum := WNetEnumResource(hEnum, cEntries, lpnrLocal, cbBuffer);
if dwResultEnum = NO_ERROR then
begin
for i := 0 to cEntries - 1 do
begin
p1 := PChar(lpnrLocal) + i * SizeOf(TNetResource);
p2 := PNetResource(p1);
s := StrPas(p2^.lpRemoteName);
if Length(s) > 2 then
if (s[1] = \'\\\') and (s[2] = \'\\\') then
begin
t := Copy(s, 3, Length(s) - 2);
if Pos(\'\\\', t) <> 0 then
Items.Add(s);
end;
if (p2.dwUsage and RESOURCEUSAGE_CONTAINER) =RESOURCEUSAGE_CONTAINER then
if DrillDepth < 3 then
EnumerateFunc(p2, Items, DrillDepth + 1);
end;
end;
until dwResultEnum = ERROR_NO_MORE_ITEMS;
GlobalFree(HGLOBAL(lpnrLocal));
dwResult := WNetCloseEnum(hEnum);
if dwResult <> NO_ERROR then
begin
EnumerateFunc := False;
exit;
end;
EnumerateFunc := True;
end;
begin
EnumerateFunc(nil, Items, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumRemoteDrives(Memo1.Lines);
end;
Jens B
dj
Nybegynder
26. februar 2001 - 11:15
#5
ahh.. det var jo meget bedrer, resten skal jeg nok finde ud af at tilpasse :)
Tak for hjælpen
mvh. _DJ_