Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Alle Arbeitsgruppen, alle Rechner und dann alle freigaben? (https://www.delphipraxis.net/5604-alle-arbeitsgruppen-alle-rechner-und-dann-alle-freigaben.html)

webhuhn 5. Aug 2003 14:09

Re: Alle Arbeitsgruppen, alle Rechner und dann alle freigabe
 
das is alles O.o

mehr brauchts dazu net?
oder muss ich das in den alte code einfügen?

achja:und wenn das alles is: tuts das unter win9x/2000/XP?

Mario 5. Aug 2003 14:17

Re: Alle Arbeitsgruppen, alle Rechner und dann alle freigabe
 
@Assarbad: Dein Source ist für den C++ Builder? Damit kann Delphi doch nix anfangen, oder?

@webhuhn: Ich bezog mich auf die erste Seite dieser Diskussion. Da hatte ich den Code gepostet. Schaue da noch mal nach, Du musst nur noch die uses ergänzen, bis er nicht mehr meckert.

Gehen sollte es unter allen Systemen.

webhuhn 5. Aug 2003 14:24

Re: Alle Arbeitsgruppen, alle Rechner und dann alle freigabe
 
achso, danke :D

dass es unter allen systeme läuft wäre gut ,weil das, was ich im moment hab tuts unter Win9X irgendwie net.. :-(


edit:
mhh.. der meckert :(

welche uses muss ich ergänzen?
ShellApi hab ich ergänz aber funktionieren tuts net

Mario 5. Aug 2003 14:29

Re: Alle Arbeitsgruppen, alle Rechner und dann alle freigabe
 
so sollte es tun (aber jetzt nicht getestet):
Delphi-Quellcode:
unit Unit1;

interface

uses Windows;

implementation

function RechnerInWG(lpnr: PNetResource): Boolean;

procedure AddComputerToList(Value: TNetResource);
var strRemoteName: String;
begin
   strRemoteName := Value.lpRemoteName;
   if Value.dwDisplayType <> RESOURCEDISPLAYTYPE_SERVER THEN Exit;
   ListBox.Items.Add(strRemoteName);
end;

const
// RESOURCE_CONNECTED RESOURCE_CONTEXT RESOURCE_GLOBALNET RESOURCE_REMEMBERED
c_dwScope = RESOURCE_GLOBALNET;
// RESOURCETYPE_ANY RESOURCETYPE_DISK RESOURCETYPE_PRINT
c_dwType = RESOURCETYPE_DISK;

var cbBuffer: DWORD;
    hEnum, dwResult, dwResultEnum : DWORD;
    lpnrLocal : array [0..16384 div SizeOf(TNetResource)] of TNetResource;
    i : Integer;
    cEntries : Longint;
begin

// 
// basiert auf Microsoft Beispiel "Enumerating Network Resources" in C++ 
// 
// [url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wnet/networks_77sj.asp[/url]
// 

cbBuffer := 16384;
centries := -1;
dwResult := WNetOpenEnum( c_dwScope,
                           c_dwType,
                           0, // 0 = All resources
                           lpnr,
                           hEnum);

if dwResult <> NO_ERROR
  then
   begin
    Result := False;
    // Fehlerbehandlung('Fehler bei WNetOpenEnum (%d)',[dwResult]);
    Exit;
   end;

FillChar( lpnrLocal, cbBuffer, 0 );

dwResultEnum := WNetEnumResource(hEnum,
                                  DWORD(cEntries),
                                  @lpnrLocal,
                                  cbBuffer);

if dwResultEnum = NO_ERROR
  then
   begin // dwResultEnum = NO_ERROR
    for i := 0 to cEntries - 1 do
     begin
      AddComputerToList(lpnrLocal[i]);
      if (c_dwScope = RESOURCE_GLOBALNET) AND
         (RESOURCEUSAGE_CONTAINER = (lpnrLocal[i].dwUsage AND RESOURCEUSAGE_CONTAINER))
       then RechnerInWG(@lpnrLocal[i]);
     end;
   end // dwResultEnum = NO_ERROR
  else
   begin // dwResultEnum <> NO_ERROR
    IF dwResultEnum <> ERROR_NO_MORE_ITEMS
     THEN
      begin
       Result := False;
       // Fehlerbehandlung (Format('Fehler bei WNetEnumResource (%d)',[dwResultEnum]));
       Exit;
      end;
   end; // dwResultEnum <> NO_ERROR

dwResult := WNetCloseEnum(hEnum);

if dwResult <> NO_ERROR
  then
   begin
    Result := False;
    // Fehlerbehandlung (Format('Fehler bei WNetCloseEnum (%d)',[dwResult]));
    Exit;
   end;

Result := True;
end;

end.
Aber Achtung! Bei großen Netzwerken kann das eine Weile dauern.

webhuhn 5. Aug 2003 14:35

Re: Alle Arbeitsgruppen, alle Rechner und dann alle freigabe
 
erstmal danke :D

aber warum meckert er da :

Code:
procedure AddComputerToList(Value: TNetResource);
var strRemoteName: String;
begin
   strRemoteName := Value.lpRemoteName;
   if Value.dwDisplayType <> RESOURCEDISPLAYTYPE_SERVER THEN Exit;
   ListBox.Items.Add(strRemoteName);
end;
das da:

[Error] Unit1.pas(30): Undeclared identifier: 'ListBox'
[Error] Unit1.pas(30): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

?

thx 4 hlp

Mario 5. Aug 2003 14:37

Re: Alle Arbeitsgruppen, alle Rechner und dann alle freigabe
 
Das ist die Listbox, die die Routine befüllen will. Die musst Du natürlich angeben, also z.B.:
Delphi-Quellcode:
Form1.ListBox1.Items.Add(strRemoteName);

webhuhn 5. Aug 2003 14:42

Re: Alle Arbeitsgruppen, alle Rechner und dann alle freigabe
 
hatte mich einfach vertippt :-(

sry :(

tuts jetzt, danke nochmal :D

#edit:

auch auf 98 :D

BIG THX :D

webhuhn 5. Aug 2003 15:40

Re: Alle Arbeitsgruppen, alle Rechner und dann alle freigabe
 
hi

ich bins ( schon wieder ;D )

gibt es auch eine möglichkeit den Progress des Rechnersuchens mit ner Progressbar darzustellen?

thx 4 hlp

Mario 6. Aug 2003 07:17

Re: Alle Arbeitsgruppen, alle Rechner und dann alle freigabe
 
Zitat:

Zitat von webhuhn
gibt es auch eine möglichkeit den Progress des Rechnersuchens mit ner Progressbar darzustellen?

Nicht das ich wüßte. Die Funktion ruft sich selbst solange auf, bis Windows keine Daten mehr bereit stellt. Nicht ohne Grund zeigt Windows, wenn man in die Netzwerkumgebung geht, nur die Eieruhr...

MikeS 6. Aug 2003 07:44

Re: Alle Arbeitsgruppen, alle Rechner und dann alle freigabe
 
Moin!
werden auch Rechner mit Linux aufgelistet??


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:15 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz