Problem mit beim Herausfinden des Computernamens



  • Hi Leute.
    Ich benutze folgenden Code, um den Computernamen des Computers, auf dem das Programm laueft herauszufinden:

    AnsiString __fastcall TForm1::HostInfo(TStrings *IPListe)
    {
        AnsiString HostName;
        char *adr;
        char hostname[64];
        WSADATA SockVer;
        hostent *hostinfo;
        in_addr ip;
    
        // Winsock initiieren
        if(WSAStartup(MAKEWORD(2,0), &SockVer))
        {   ShowMessage("WSAStartup fehlgeschlagen");
            return("");
        }
    
        // Hostnamen auslesen
        if(gethostname(hostname, sizeof(hostname)))
        {   switch(WSAGetLastError())
            {   case WSAEFAULT          :   ShowMessage("WSAEFAULT");
                                            break;
                case WSANOTINITIALISED  :   ShowMessage("WSANOTINITIALISED");
                                            break;
                case WSAENETDOWN        :   ShowMessage("WSAENETDOWN");
                                            break;
                case WSAEINPROGRESS     :   ShowMessage("WSAEINPROGRESS");
                                            break;
                default :   ShowMessage("Unknown Errorcode");
            }
            WSACleanup();
            return("");
        }
    
        // Hostinfo anhand des Hostnamens holen
        if((hostinfo=gethostbyname(hostname))==NULL)
        {   switch(WSAGetLastError())
            {   case WSANOTINITIALISED  :   ShowMessage("WSANOTINITIALISED");
                                            break;
                case WSAENETDOWN        :   ShowMessage("WSAENETDOWN");
                                            break;
                case WSAHOST_NOT_FOUND  :   ShowMessage("WSAHOST_NOT_FOUND");
                                            break;
                case WSATRY_AGAIN       :   ShowMessage("WSATRY_AGAIN");
                                            break;
                case WSANO_RECOVERY     :   ShowMessage("WSANO_RECOVERY");
                                            break;
                case WSANO_DATA         :   ShowMessage("WSANO_DATA");
                                            break;
                case WSAEINPROGRESS     :   ShowMessage("WSAEINPROGRESS");
                                            break;
                case WSAEFAULT          :   ShowMessage("WSAEFAULT");
                                            break;
                case WSAEINTR           :   ShowMessage("WSAEINTR");
                                            break;
                default :   ShowMessage("Unknown Errorcode");
            }
            WSACleanup();
            return("");
        }
    
        // IPs auslesen und in lesbare Form umwandeln
        for(int x=0; (adr=hostinfo->h_addr_list[x])!=NULL; x++)
        {   ip.S_un.S_addr=*((unsigned long*)adr);
            IPListe->Add(inet_ntoa(ip));
        }
        HostName=hostinfo->h_name;
    
        WSACleanup();
        return(HostName);
    }
    //---------------------------------------------------------------------------
    

    Bei Windows 98 SE und WinXP klappt das Problemlos. Nur bei Windows 98 (NICHT SE) bekomm ich den aktuellen Benutzer und nicht den Computernamen zurueck.. Woran liegt das?

    MfG Aoeke

    PS. Ich weiss jetzt nicht, ob das ins WinApi Forum schreiben sollte und da ich mit dem Forum hier besser vertraut bin, hab ichs hierhin geschrieben. Sollte es die falsche Entscheidung gewesen sein, Sorry..



  • und wie wärs einfach mit GetComputerName(...) ?



  • @Xqgene
    Requires Windows 2000 or later



  • Hat der Rechner denn einen Hostnamen oder nur nen Netbios-Namen ?

    MSDN sagt:

    Note If no local host name has been configured, gethostname must succeed and return a token host name that gethostbyname or WSAAsyncGetHostByName can resolve.

    Gruss d_A



  • ich weiß nicht ab welcher Win Version das funzt, aber es ist sicherlich eine versuch wert:

    char NameBuffer[256];
    GetEnvironmentVariable( "COMPUTERNAME", NameBuffer, 255);
    


  • illuminator schrieb:

    ich weiß nicht ab welcher Win Version das funzt, aber es ist sicherlich eine versuch wert:

    char NameBuffer[256];
    GetEnvironmentVariable( "COMPUTERNAME", NameBuffer, 255);
    

    Bei Windows 9X und Windows Me wird diese Umgebungsvariable nicht gesetzt.

    Gruss d_A


Anmelden zum Antworten