Username Windows auslesen



  • Hallo,

    ich könnte mal eure Hilfe beim Username auslesen von Windows gebrauchen.

    Ich hatte immer diesen Code verwendet, der mit der alten Builderversion ging.
    Jetzt mit dem Builer 10.2 geht es leider nicht mehr.

    // Username
    DWORD dwSize = 0;

    // Determine how many chars we need to store user name
    GetUserName(NULL, &dwSize);

    // create a buffer that is big enough
    char *szBuf = new char[dwSize];
    szBuf[0] = '\0';
    GetUserName(szBuf, &dwSize);

    Edit1->Text = szBuf;

    Fehlermeldung:

    [bcc32 Fehler] Unit1.cpp(30): E2034 Konvertierung von 'char *' nach 'wchar_t *' nicht möglich

    [bcc32 Fehler] Unit1.cpp(30): E2342 Keine Übereinstimmung des Parametertyps 'lpBuffer' ('wchar_t *' erwartet, 'char *' erhalten)



  • Stichwort: Unicode

    Wenn du weiterhin mit ANSI arbeiten willst, dann verwende explizit

    GetUserNameA(szBuf, &dwSize); // beachte das A
    

    Alternativ verwende TCHAR, s.a. Windows Data Types for Strings.

    Es kommt natürlich auch drauf an, ob die VCL-Komponenten mit Unicode umgehen können, d.h. welche RAD Studio-Version du verwendest? (s. Rad Studio Berlin (10.1): Anwendungen für Unicode anpassen)

    Für Delphi s.a. Delphi and Unicode.



  • Ich habe es jetzt so gemacht, das lag an den "char", jetzt groß geschrieben "Char",.....und es geht.

    //Computernamen anzeigen
    Char buf[300];
    DWORD bufSize = sizeof(buf);
    bufSize = sizeof(buf);
    GetComputerName(buf, &bufSize);
    StatusBar1->Panels->Items[0]->Text= ("Computer: " + String(buf));

    //Usernamen anzeigen
    Char buf1[300];
    DWORD bufSize1 = sizeof(buf1);
    GetUserName(buf1, &bufSize1);
    StatusBar1->Panels->Items[1]->Text= ("User: " + String(buf1));



  • Dann dürfte Char wohl als TCHAR definiert sein.


Log in to reply