Frage bezüglich Netzwerksuche



  • So nachdem ihr mir ja gestern erfolgreich geholfen habt die Suche auf die Beine zu stellen..Jetzt muss ich die Suche für Netzwerk umsetzen

    void suche(AnsiString pfad, std::ofstream & ofs )
    {
    Form2->Caption=pfad;
    TSearchRec sr;
    pfad += "\\";
    if (FindFirst(pfad + "*", faAnyFile, sr) == 0)
      {
        do
        {
                    if ((sr.Name != ".")&&(sr.Name != ".."))
                    {
    
                          if (sr.Attr == faDirectory)
                          {
                                    suche(pfad+sr.Name, ofs);
                          }
                          else
                          {
                            ofs << ( pfad + sr.Name ).c_str() << std::endl;
                          }
                    }
    
        } while (FindNext(sr) == 0);
        FindClose(sr);
      }
    }
    
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
    std::ofstream ofs("lokal.txt");
    suche(Edit1->Text, ofs);
    }
    

    meine Suche bis jetzt...

    Aber wie bekomme ich es jetzt hin das ganze fürs gesamte Netzwerk umzusetzen..so das nach dem Klick das gesamte Netzwerk durchlaufen wird??

    Soll auch ohne Edit Eingabe sein..soll gleich nach dem Start durchlaufen.Und für jeden Rechner eine eigene .txt Datei erstellen die alle daten mit pfad darin speichert..

    Ich weiss nich ob ich das jemals hin bekomme...

    Ich hoffe ihr könnt mir helfen..

    Dankeschön



  • softkuecki schrieb:

    Ich weiss nich ob ich das jemals hin bekomme...

    Ich denke nicht.



  • danke..

    deswegen frag ich ja hier..
    hat niemand eine Idee?



  • Hallo softkuecki,

    ja es gibt leider Menschen die sich über den Kummer anderer auch noch lustig machen.

    So wirklich habe ich auch keinen Plan in der Tasche, aber ich denke wenn man es schaft die Rechnernamen im Netzwerk zu finden und aufzulisten ist man einen Schritt weiter. Lies doch bitte mal in dem nach stehhenden Link ob dir das weiter hilft.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-10352-and-highlight-is-netzwerk+suche.html

    Viel Erfolg
    evi48



  • Ich fürchte, da mußt Du die WinAPI bemühen. Schau Dir mal GetLogicalDrives / GetLogicalDriveStrings und GetNetworkDrivesList an.



  • Habe noch was in FAQ's gefunden mit Beispiel zum Thema "Netzwerk - Namen aller Rechner im lokalen Netzwerk anzeigen"

    http://www.c-plusplus.net/forum/viewtopic.php?t=39179

    evi48



  • ich habe es als Pascal:

    procedure SucheDomains(ComboBox : TComboBox);
    
    type PMyRec = ^MyRec;
         MyRec = record
          dwScope : Integer;
          dwType : Integer;
          dwDisplayType : Integer;
          dwUsage : Integer;
          LocalName : string;
          RemoteName : string;
          Comment : string;
          Provider : string;
    end;
    PnetResourceArr = ^TNetResource;
    
    var NetResource : TNetResource;
        TempRec : PMyRec;
        Buf : Pointer;
        Count, BufSize, Res : DWORD;
        lphEnum : THandle;
        p : PNetResourceArr;
        i, j : SmallInt;
        NetworkTypeList : TList;
    
    begin
      ComboBox.Items.BeginUpdate;
      ComboBox.Clear;
      NetworkTypeList := TList.Create;
      GetMem(Buf, 8192);
      try
        Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, Nil, lphEnum);
        If Res <> 0 Then Raise Exception(Res);
        Count := $FFFFFFFF;
        BufSize := 8192;
        Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
        If Res = ERROR_NO_MORE_ITEMS Then Exit;
        If (Res <> 0) Then Raise Exception(Res);
        P := PNetResourceArr(Buf);
        For i := 0 To Count - 1 do begin
         New(TempRec);
         TempRec^.dwScope := P^.dwScope;
         TempRec^.dwType := P^.dwType;
         TempRec^.dwDisplayType := P^.dwDisplayType;
         TempRec^.dwUsage := P^.dwUsage;
         TempRec^.LocalName := StrPas(P^.lpLocalName);
         TempRec^.RemoteName := StrPas(P^.lpRemoteName);
         TempRec^.Comment := StrPas(P^.lpComment);
         TempRec^.Provider := StrPas(P^.lpProvider);
         NetworkTypeList.Add(TempRec);
         Inc(P);
        End;
        Res := WNetCloseEnum(lphEnum);
        If Res <> 0 Then Raise Exception(Res);
        for j := 0 to NetworkTypeList.Count - 1 do begin
          TempRec := NetworkTypeList.Items[J];
          NetResource := TNetResource(TempRec^);
          Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
          If Res <> 0 Then Raise Exception(Res);
          While true do begin
            Count := $FFFFFFFF;
            BufSize := 8192;
            Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
            If Res = ERROR_NO_MORE_ITEMS Then Break;
            If (Res <> 0) Then Raise Exception(Res);
            P := PNetResourceArr(Buf);
            For i := 0 To Count - 1 do begin
              ComboBox.Items.Add(P^.lpRemoteName);
              Inc(P);
            End;
          End;
        End;
        Res := WNetCloseEnum(lphEnum);
        If Res <> 0 Then Raise Exception(Res);
      finally
        FreeMem(Buf);
        NetworkTypeList.Destroy;
      end;
      If ComboBox.Items.Count > 0 then ComboBox.ItemIndex := 0;
      ComboBox.Items.EndUpdate;
    end;
    
    procedure SucheComputer(Domain : string; ListBox : TListBox);
    type PnetResourceArr = ^TNetResource;
    Var NetResource : TNetResource;
        Buf : Pointer;
        Count,BufSize,Res : DWord;
        Ind : Integer;
        lphEnum : THandle;
        Temp : PNetResourceArr;
    Begin
      //ListBox.Items.BeginUpdate;
      try
        screen.Cursor := crHourGlass;
        ListBox.Clear;
        GetMem(Buf,8192);
        Try
          FillChar(NetResource, SizeOf(NetResource), 0);
          NetResource.lpRemoteName := PChar(Domain);
          NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;
          NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
          NetResource.dwScope := RESOURCETYPE_DISK;
          Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
          If Res <> 0 Then Exit;
          While True Do Begin
            Count := $FFFFFFFF;
            BufSize := 8192;
            Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
            If Res = ERROR_NO_MORE_ITEMS Then Exit;
            If (Res <> 0) then Exit;
            Temp := PNetResourceArr(Buf);
            For Ind := 0 to Count - 1 do Begin
              ListBox.Items.Add(Temp^.lpRemoteName + 2);
              Inc(Temp);
            End;
          End;
          Res := WNetCloseEnum(lphEnum);
          If Res <> 0 Then Raise Exception(Res);
        Finally
          FreeMem(Buf);
        End;
      finally
        screen.Cursor := crDefault;
      end;
      //ListBox.Items.EndUpdate;
    End;
    
    function NetzLaufwerkVerbinden(Laufwerk, Pfad, UserName, Password: string): DWORD;
    var
      nRes: TNetResource;
      errCode: DWORD;
      dwFlags: DWORD;
    begin
      FillChar(NRes, SizeOf(NRes), #0);
      nRes.dwType := RESOURCETYPE_DISK;
      nRes.lpLocalName  := PChar(Laufwerk);
      nRes.lpRemoteName := PChar(Pfad);
      nRes.lpProvider := '';
      dwFlags := CONNECT_INTERACTIVE;
      errCode := WNetAddConnection3(Form1.Handle, nRes, pchar(Password), pchar(Username), dwFlags);
      {if (errCode <> NO_ERROR) and (_showError) then
      begin
        form1.re1.Lines.Add(SysErrorMessage(GetLastError));
      end;}
      Result := errCode;
    end;
    
    procedure NetzLaufwerkTrennen(Laufwerk : string);
    begin
      WNetCancelConnection2(pchar(Laufwerk),CONNECT_UPDATE_PROFILE,True);
    end;
    
    procedure SucheFreieLaufwerke(ComboBox : TComboBox);
    var i, typ : Integer;
    begin
      ComboBox.Items.BeginUpdate;
      ComboBox.Clear;
      for i := 0 To 25 do begin
        typ := GetDriveType(PChar(Chr(i + 65) + ':\'));
        If Typ = 1 Then ComboBox.Items.Add(Chr(i + 65));
      end;
      If ComboBox.Items.Count > 0 then ComboBox.ItemIndex := 0;
      ComboBox.Items.EndUpdate;
    end;
    

    aber könntet ihr es mir in c++ übersetzen??
    Es ist das vollständige Programm wie ich es brauche..
    Ich muss zuerst die Domain und dann die Rechner auf den Domains ausfinden..



  • Hallo,

    Da gibt es auch noch diese Links.
    Laufwerke verbinden
    http://www.bytesandmore.de/rad/cpp/snipp/sc08001.php
    Laufwerke suchen
    http://www.bytesandmore.de/rad/cpp/snipp/sc08020.php
    Vielleicht ist das in den vorigen Links schon enthalten, aber ich poste sie trotzdem nochmal. Im zweiten Link ist auch ein Downlaod für den BCB dabei.

    Ciao


Anmelden zum Antworten