Netzwerk - Namen aller Rechner im lokalen Netzwerk anzeigen



  • Ich habe da einen Beitrag schonmal unter WinApi gefunden, jedoch komme ich mit dem nicht klar.
    Rechner im Netzwerk auflisten
    "fprintf" wird da sehr oft am Anfagn der Zeile gehängt, dass habe ich noch nie im BCB gesehen. Ich habe das auch alles mal kompiliert, ging sogar gut, keine Fehler. Jedoch weiß icht ob diese Datei auch für den BCB bestimmt ist.

    Ich möchte alle User des Netzwerkes rausfinden, alle haben die gleiche Anmeldedomain. Das könnte euch vielleicht helfen.
    Ich möchte nun jeden Usernamen (Anmeldenamen) der im Netzwerk angemeldet ist, in einer ListBox anzeigen.

    Ich hoffe hier etwas weiter zu kommen.

    thx Leute

    Edit:
    Wie im zitierten Thread auch geht es hier um die Rechnernamen, nicht um die Benutzer.

    [ Dieser Beitrag wurde am 25.11.2002 um 00:41 Uhr von Jansen editiert. ]



  • Das Thema passt auch in unsere FAQ, deshalb eine "BCB-Version" dieses Beitrags aus dem WinAPI-Forum. Vorausgesetzt wird ein ListView mit sechs Columns, im ViewStyle vsReport.

    //---------------------------------------------------------------------------
    #ifndef UNICODE
    #define UNICODE
    #endif
    
    #include <vcl.h>
    #include <lm.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
      : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      LPSERVER_INFO_101 pBuf = NULL;
      LPSERVER_INFO_101 pTmpBuf;
      DWORD dwLevel = 101;
      DWORD dwPrefMaxLen = -1;
      DWORD dwEntriesRead = 0;
      DWORD dwTotalEntries = 0;
      DWORD dwTotalCount = 0;
      DWORD dwServerType = SV_TYPE_SERVER; // all servers
      DWORD dwResumeHandle = 0;
      NET_API_STATUS nStatus;
      LPTSTR pszServerName = NULL;
      DWORD i;
    
      // Call the NetServerEnum function to retrieve information
      // for all servers, specifying information level 101.
      nStatus = NetServerEnum(pszServerName,
                              dwLevel,
                              (LPBYTE *) &pBuf,
                              dwPrefMaxLen,
                              &dwEntriesRead,
                              &dwTotalEntries,
                              dwServerType,
                              NULL,
                              &dwResumeHandle);
    
      // If the call succeeds,
      if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
      {
        if ((pTmpBuf = pBuf) != NULL)
        {
          // Loop through the entries and
          // print the data for all server types.
          for (i = 0; i < dwEntriesRead; i++)
          {
            TListItem  *ListItem = ListView1->Items->Add();
            ListItem->Caption = pTmpBuf->sv101_name;
            ListItem->SubItems->Add(pTmpBuf->sv101_platform_id);
            ListItem->SubItems->Add(String(pTmpBuf->sv101_version_major) + "." +
                                    String(pTmpBuf->sv101_version_minor));
            ListItem->SubItems->Add(pTmpBuf->sv101_type);
    
            // Check to see if the server is a domain controller;
            // if so, identify it as a PDC or a BDC.
            if (pTmpBuf->sv101_type & SV_TYPE_DOMAIN_CTRL)                
              ListItem->SubItems->Add("PDC");
            else if (pTmpBuf->sv101_type & SV_TYPE_DOMAIN_BAKCTRL)
              ListItem->SubItems->Add("BDC");
    
            ListItem->SubItems->Add(pTmpBuf->sv101_comment);
    
            pTmpBuf++;
            dwTotalCount++;
          }
    
          // Display a warning if all available entries were not enumerated,
          // print the number actually enumerated, and the total number available.
          if (nStatus == ERROR_MORE_DATA)
            Application->MessageBox(("Total entries: " + String(dwTotalEntries)).c_str(),
                                     "More entries available!", MB_OK | MB_ICONSTOP);
    
          Caption = "Entries enumerated: " + String(dwTotalCount);
        }
      }
    
      // Free the allocated buffer.
      if (pBuf)
        NetApiBufferFree(pBuf);
    }
    //---------------------------------------------------------------------------
    

    Im Originalbeitrag wird ausdrücklich darauf hingewiesen die netapi32.lib einzubinden, hier im BCB6 war dies jedoch nicht erforderlich.


Anmelden zum Antworten