Avatar billede athlon-pascal Juniormester
30. juli 2002 - 23:03 Der er 17 kommentarer og
1 løsning

Liste over alle brugere i et netværk ...

Hvordan for man en liste over alle brugerne (brugernavne) i et netværk?

Jeg bruger Win98 og Delphi4
Avatar billede borrisholt Novice
31. juli 2002 - 09:24 #1
Så er jeg sq ikke sikker på du kan jeg har noget kode der kan på en NT. Det kan du da godt få ...

Jens B
Avatar billede athlon-pascal Juniormester
31. juli 2002 - 20:49 #2
WNetOpenEnum.zip?

Det virker fint i Win98 (Kan bare ikke se hvad listview'en til højre skal bruges til), jeg kan bare ikke tyde koden (en by i Rusland), noget mere præcist med en listbox, og kun med brugernavne ville være fint :)
Avatar billede athlon-pascal Juniormester
31. juli 2002 - 21:08 #3
Hvis det ikke er WNetOpenEnum.zip du har i tankerne er jeg nysgerrig alligevel :)
Avatar billede athlon-pascal Juniormester
01. august 2002 - 22:32 #4
Jens Borrisholt -> Det har stadigvæk interrese :)
Avatar billede borrisholt Novice
02. august 2002 - 08:41 #5
Avatar billede athlon-pascal Juniormester
02. august 2002 - 13:10 #6
Kigger på det
Avatar billede athlon-pascal Juniormester
02. august 2002 - 13:19 #7
Fejl under programstart

Filen USERS.EXE er sammenkædet med en manglende eksportfil NETAPI32.DLL:NetServerEnumEx.
Avatar billede borrisholt Novice
02. august 2002 - 13:21 #8
Det er fordi du ikke kører Win NT/2k/xp

Jens B
Avatar billede athlon-pascal Juniormester
02. august 2002 - 13:28 #9
Er der ikke en anden løsning?
Avatar billede athlon-pascal Juniormester
02. august 2002 - 13:30 #10
Hvordan virker f.eks. WNetOpenEnum.zip?
Den virker, men viser desværre også andre ting end netværksbrugernavne :(
Avatar billede borrisholt Novice
02. august 2002 - 13:34 #11
WNetOpenEnum Scanner HELE netværket i gennem efter shares. Printere .. bibloteker etc ....


Det kan du jo blot begrænse ...

Jens B
Avatar billede athlon-pascal Juniormester
02. august 2002 - 13:35 #12
Problem: Jeg forstår ikke koden :(
Avatar billede borrisholt Novice
02. august 2002 - 13:39 #13
WNetOpenEnum kan give dig alle computere navne ... Ikke alle brugere ..

Jens B
Avatar billede athlon-pascal Juniormester
02. august 2002 - 13:43 #14
Jeg kan nok godt bruge computernavnene i stedet, hvordan gør man?
Avatar billede athlon-pascal Juniormester
02. august 2002 - 13:54 #15
Jeg skal bruge dem til et besked-program til mit lille netværk, basseret på UtilMinds MailSlot-komponent :)
Avatar billede borrisholt Novice
02. august 2002 - 13:59 #16
sæt en memo på din form og så det her :

unit Unit1;

interface


uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}


const InitialSize = $1;  // Any positive value is acceptable.

type
    TNetEnumThread = class(TThread)
        ChildNode: PChar;
        procedure AddChildNode;
        procedure Execute; override;
        procedure LoadNetNode(NodeName: PChar; NetNode: PNetResourceA);
    end;

procedure TNetEnumThread.Execute;
begin
    LoadNetNode(nil,nil);
end;

procedure TNetEnumThread.AddChildNode;
begin
//    TreeNode:=Form1.TV.Items.AddChild(TreeNode,StrPas(ChildNode));

  Form1.Memo1.Lines.Add(ChildNode);
end;

procedure TNetEnumThread.LoadNetNode(NodeName: PChar; NetNode: PNetResourceA);
var
  hEnum : THandle;
  Count,BufSize: DWORD;
  NR,Buf: PNetResourceA;
  R: Integer;
begin
    R:=WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY , 0, NetNode, hEnum);

    if R <> NO_ERROR then
      exit;

    BufSize:=InitialSize;
    GetMem(Buf,BufSize);

    try
        while True do
        begin
          Count:=$FFFFFFFF; // I wish to read ALL items
          R:=WNetEnumResource(hEnum,Count, Buf, BufSize);

          if R = ERROR_MORE_DATA then // Oops ! The InitialSize is too small !
          begin
            Count:=$FFFFFFFF; // I wish to read ALL items
            FreeMem(Buf);
            GetMem(Buf,BufSize);
            R:=WNetEnumResource(hEnum,Count, Buf, BufSize);
          end;

          if R = ERROR_NO_MORE_ITEMS then
            Break; // All items are processed

          if R <> NO_ERROR then
            Abort; // R is the error code. Process it!

          NR:=Buf;

          while Count > 0 do
          begin
            ChildNode:=NR.lpRemoteName;

            if nr.dwDisplayType = RESOURCEDISPLAYTYPE_SERVER then
              Synchronize(AddChildNode);

            LoadNetNode(ChildNode,NR);
            Inc(NR);
            Dec(Count);
          end;
        end;
    finally
        WNetCloseEnum(hEnum);
        FreeMem(Buf);
    end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  TNetEnumThread.Create(False);
end;

end.

Jens B
Avatar billede athlon-pascal Juniormester
02. august 2002 - 14:04 #17
Jeg kigger på det, kan ikke garentere svar lige med det samme, men skal nok vende tilbage :)
Avatar billede athlon-pascal Juniormester
02. august 2002 - 17:53 #18
Det kan bruges, tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester