Autor Beitrag
Tana´Ri
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 230



BeitragVerfasst: Fr 25.06.04 10:32 
Hi Leute,

also ich habe folgende Procedure geschrieben, diese funktioniert auch, jedoch mit einem seltsamen Effekt. Zum Start der Applikation rufe ich diese Procedure im OnCreate Event des Forms auf, dabei werden alle Netzwerk-Computer (LAN) ermittelt. Über ein PopUp-Menüpunkt kann diese dann abgerufen werden, eigentlich wollte ich zuvor erneut die Procedure ausführen um die Aktualität zu garantieren, doch dabei werden nicht mehr alle Hosts ermittelt (unser Server fehlt!). Ich habe den Effekt auch auf anderen Rechner gehabt (gleiche EXE) ... unter XP scheint er die Funktionen (API) gar nicht mehr zu kennen bzw. was abgeändert zu sein, dort gings gar nicht (XP wird im SDK aber mitaufgeführt, jedoch nur Client-Part). Vielleicht hat einer von euch ne Erklärung dafür (Windoof?) ;)

Hier mal meine Procedure:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
Procedure MyServer.LANEnumResource(var List: TStringList);
 const MaxEntries = 500;
 var hEnum,
     ihEnum,
     khEnum  : THandle;
     buffer,
     ibuffer,
     kbuffer : array [0..MaxEntries] of TNETRESOURCE;
     buffersize: cardinal;
     Count,iCount,kCount: DWORD;
     i, j, k : integer;
 begin
  List.Clear;
  buffersize := sizeof(buffer);
  if WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,NIL,hEnum) = NO_ERROR then
  try
   if WNetEnumResource(hEnum,Count,@buffer,buffersize) = NO_ERROR then begin

      for i:=0 to Count-1 do begin

       if WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,@buffer[i],ihEnum) = NO_ERROR then
        try
         if WNetEnumResource(ihEnum,iCount,@ibuffer,buffersize) = NO_ERROR then begin
          for j:=0 to iCount-1 do

           if WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,@ibuffer[j],khEnum) = NO_ERROR then
           try
            if WNetEnumResource(khEnum,kCount,@kbuffer,buffersize) = NO_ERROR then begin
             for k:=0 to kCount-1 do

              List.Add( kbuffer[k].lpRemoteName );

             end;
           finally
            WNetCloseEnum(khEnum);
           end;

         end;
        finally
         WNetCloseEnum(ihEnum);
        end;
      end;

   end;
  finally
   WNetCloseEnum(hEnum);
  end;
end;

_________________
mfg
Tana´Ri