CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Taka sama nazwa komputera

Taka sama nazwa komputera

dział ogólny

Taka sama nazwa komputera

Nowy postprzez duf » środa, 29 lutego 2012, 13:19

Chciałbym zasięgnąć wiedzy na temat nazwy komputera w sieci. Jeżeli jest kilka komputerów w sieci i każdy może się dowolnie nazywać to co w przypadku gdy co najmniej dwa komputery mają taką sama nazwę i jak je wtedy zidentyfikować? Jest taka funkcja w api GetComputerName() i z niej korzystam ale obawiam się, że gdy trafi się przypadek z dwoma takimi samymi nazwami to nie nie będę wiedział jak to ugryźć.
Avatar użytkownika
duf
Intelektryk
Intelektryk
 
Posty: 175
Dołączył(a): czwartek, 9 października 2008, 13:02
Podziękował : 17
Otrzymał podziękowań: 2
System operacyjny: Windows 10
Kompilator: XE8
Gadu Gadu: 0
    Windows XPFirefox

Re: Taka sama nazwa komputera

Nowy postprzez Cyfrowy Baron » środa, 29 lutego 2012, 17:37

Użyj funkcji GetComputerNameEx, która to funkcja zwraca więcej danych na temat komputera.

Przykład użycia tej funkcji z pliku pomocy do C++Builder 2010:

KOD cpp:     UKRYJ  
#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void _tmain(void)
{
    TCHAR buffer[256] = TEXT("");
    TCHAR szDescription[8][32] = {TEXT("NetBIOS"),
        TEXT("DNS hostname"),
        TEXT("DNS domain"),
        TEXT("DNS fully-qualified"),
        TEXT("Physical NetBIOS"),
        TEXT("Physical DNS hostname"),
        TEXT("Physical DNS domain"),
        TEXT("Physical DNS fully-qualified")};
    int cnf = 0;
    DWORD dwSize = sizeof(buffer);
       
    for (cnf = 0; cnf < ComputerNameMax; cnf++)
    {
        if (!GetComputerNameEx((COMPUTER_NAME_FORMAT)cnf, buffer, &dwSize))
        {
            _tprintf(TEXT("GetComputerNameEx failed (%d)\n"), GetLastError());
            return;
        }
        else _tprintf(TEXT("%s: %s\n"), szDescription[cnf], buffer);

        dwSize = sizeof(buffer);
        ZeroMemory(buffer, dwSize);
    }
}


To dla aplikacji konsolowej, ale można to łatwo przerobić tak by informacje były wyświetlane np. w Memo:

KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------
//#define _WIN32_WINNT 0x0500

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

#include <stdio.h>

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Memo1->Lines->Clear();

  TCHAR buffer[256] = TEXT("");
  TCHAR szDescription[8][32] = {TEXT("NetBIOS"),
        TEXT("DNS hostname"),
                TEXT("DNS domain"),
        TEXT("DNS fully-qualified"),
        TEXT("Physical NetBIOS"),
        TEXT("Physical DNS hostname"),
        TEXT("Physical DNS domain"),
        TEXT("Physical DNS fully-qualified")};
  int cnf = 0;
  DWORD dwSize = sizeof(buffer);

  for (cnf = 0; cnf < ComputerNameMax; cnf++)
  {
   if(!GetComputerNameEx((COMPUTER_NAME_FORMAT)cnf, buffer, &dwSize))
   {
        wchar_t wcError[256];
        swprintf( wcError, L"GetComputerNameEx failed (%d)", GetLastError() ) ;
        ShowMessage( (String)wcError );
        return;
   }
   else
   {
        wchar_t wcMemo[500];
        swprintf(wcMemo, L"%s: %s", szDescription[cnf], buffer);
        Memo1->Lines->Add( (String)wcMemo );
   }

                dwSize = sizeof(buffer);
        ZeroMemory(buffer, dwSize);
  }

}
//---------------------------------------------------------------------------


U mnie dyrektywa #define _WIN32_WINNT 0x0500 sprawiała, że program nie chciał się skompilować, więc ją usunąłem.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 2 gości

cron