Usernamen in C++ auslesen
-
Hallo,
ich wollte fragen wie ich den Usernamen des Computers in C++ auslesen kann.
ich habe es so - laut Google - mal ausprobiert:#include "stdafx.h" #include <Windows.h> #include <stdio.h> using namespace std; int main(void) { char username[20]; DWORD usernamelen = sizeof(username); if(!GetUserName(username, &usernamelen)) { printf("Error %d occured\n", (int)GetLastError()); } else { printf("Username is %s", username); } return 0; }
kriege jedoch folgenden
1> kjhgfds.cpp 1>kjhgfds.cpp(13): error C2664: 'GetUserNameW': Konvertierung des Parameters 1 von 'char [20]' in 'LPWSTR' nicht möglich 1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
Bitte helft mir
lg timtrucker
-
Das Problem ist dass dein Projekt mit UNICODE kompiliert wird, du aber nur fix einen char Buffer übergibst.
Verwend TCHAR statt char oder gleich wchar_t + GetUserNameW.
-
Du implementierst in Unicode und vermischst ASCII mit Unicode !
Zum Einstieg:
http://www.cplusplus.com/forum/articles/16820/#include "stdafx.h" #include <Windows.h> #include <stdio.h> using namespace std; int main(void) { wchar_t username[20]; DWORD usernamelen = 20; if(!GetUserName(username, &usernamelen)) { printf(_T("Error %d occured\n"), (int)GetLastError()); } else { printf(_T("Username is %s"), username); } return 0; }
-
Bitte ein Bit schrieb:
Du implementierst in Unicode und vermischst ASCII mit Unicode !
Zum Einstieg:
http://www.cplusplus.com/forum/articles/16820/#include "stdafx.h" #include <Windows.h> #include <stdio.h> using namespace std; int main(void) { wchar_t username[20]; DWORD usernamelen = 20; if(!GetUserName(username, &usernamelen)) { printf(_T("Error %d occured\n"), (int)GetLastError()); } else { printf(_T("Username is %s"), username); } return 0; }
"_T": Bezeichner wurde nicht gefunden.
-
Ich bin mir ja nicht ganz sicher aber ich meine, dass ich
using namespace std;
nur benutzen kann, wenn ich vorher
#include <iostream>
hab.
und dann kannst du das ganze mit
cout<<
ausgeben.
-
Wofür überhaupt das using namespace std? Wofür überhaupt stdafx.h? Warum printf()?
Und selbst wenn, dann so:
#include "stdafx.h" #include <Windows.h> #include <cwchar> int main() { wchar_t username[20]; DWORD usernamelen = 20; if(!GetUserNameW(username, &usernamelen)) { std::wprintf(L"Error %d occured\n", (int)GetLastError()); } else { std::wprintf(L"Username is %s", username); } return 0; }
oder so
#include "stdafx.h" #include <Windows.h> #include <cstdio> int main() { char username[20]; DWORD usernamelen = 20; if(!GetUserNameA(username, &usernamelen)) { std::printf("Error %d occured\n", (int)GetLastError()); } else { std::printf("Username is %s", username); } return 0; }
Ist aber natürlich keine perfekte Lösung, denn was wenn der Username länger als 19 Zeichen ist?
-
"_T": Bezeichner wurde nicht gefunden.
Du musst tchar.h noch includieren.
-
Selbst dann wird printf() immer noch kein wide String Literal akzeptieren.
_T oder TEXT() bringen nur was wenn du mit TCHAR arbeitest. Wenn du mit wchar_t arbeitest, dann verwend auch einfach die entsprechenden Literale (L"Hello World"
). Ansonsten hast du wieder das gleiche Problem nur eben in die andere Richtung, nämlich sobald du mal ohne UNICODE kompilierst...