![]() |
GetComputerName / GetUserName
Microsoft ist doch immer wieder für eine Überraschung gut bzw. ich habe die Vermutung, sie wollen uns einfach nur ärgern. Folgendes habe ich in meiner SysInfo benutzt:
Delphi-Quellcode:
Man beachte die Kommentare. Ich hatte erst GetCompName geschrieben und dann per Copy&Paste GetUser raus gemacht. Soweit kein Problem. Ich habe mich nur gewunder, warum nach dem Aufruf von GetUser nichts mehr ausgegeben wird. Beim Debuggen habe ich dann gesehen, dass GetCompName 'HAL9000' und GetUser 'Administrator'#0 liefert. Das dann natürlich die Ausgabe bei null terminierenden Strings zu ende ist, ist klar. :roll:
procedure TWinInfo.GetCompName;
const UNLEN = 256; // Maximum computer name length (LmCons.h) var Size: DWORD; begin Size := UNLEN + 1; SetLength(FComputerName, Size); if GetComputerName(PChar(FComputerName), Size) then SetLength(FComputerName, Size) // Size _ohne_ #0 else FComputerName := ''; end; procedure TWinInfo.GetUser; const UNLEN = 256; // Maximum computer name length (LmCons.h) var Size: DWORD; begin Size := UNLEN + 1; SetLength(FUserName, Size); if GetUserName(PChar(FUserName), size) then SetLength(FUserName, Size-1) // Argh Size _mit_ #0 else FUserName := ''; end; Und wenn man im PSDK nach liest, findet man auch folgendes:
Delphi-Quellcode:
BOOL GetComputerName(
LPTSTR lpBuffer, LPDWORD lpnSize ); Zitat:
Delphi-Quellcode:
BOOL GetUserName(
LPTSTR lpBuffer, LPDWORD nSize ); Zitat:
So viel zur Konsistenz der WIN-API. :x |
Nach Rücksprache mit Assarbad hier jetzt die optimierte Version. Damit umgeht man auch das Problem, welches Microsoft gerade zu provoziert:
Delphi-Quellcode:
GetUserName eben so.
procedure TWinInfo.GetCompName;
var buffer : array[0..MAX_PATH] of Char; Size: DWORD; begin Size := sizeof(buffer); GetComputerName(buffer, Size); SetString(FComputerName, buffer, lstrlen(buffer)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz