Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Computernamen auslesen unter RAD 2009 und Vista (https://www.delphipraxis.net/130049-computernamen-auslesen-unter-rad-2009-und-vista.html)

Alex_ITA01 2. Mär 2009 14:07


Computernamen auslesen unter RAD 2009 und Vista
 
Hallo zusammen,
habt ihr eine Idee, wie ich die folgende Funktion (unter Delphi 2006 geht diese) unter RAD 2009 zum laufen bekomme? In Computername steht nicht der richtige Computername drinne (zwischen den Zeichen sind immer #0 ansonsten würde der Name passen).
Danke schonmal und viele Grüße
Alex

Delphi-Quellcode:
var
  CName       : Array [0..255] of Char;
  nSize       : Cardinal;
  ComputerName : String[MAX_COMPUTERNAME_LENGTH];
begin
  if GetComputerName (CName, nSize) then
  begin
    SetLength (ComputerName, nSize);
    if nSize > Length (ComputerName) then
      nSize := Length (ComputerName);
    Move     (CName, ComputerName[1], nSize);
  end;
end;

mkinzler 2. Mär 2009 14:08

Re: Computernamen auslesen unter RAD 2009 und Vista
 
Versuch mal
Delphi-Quellcode:
ComputerName : AnsiString[MAX_COMPUTERNAME_LENGTH];

Muetze1 2. Mär 2009 14:11

Re: Computernamen auslesen unter RAD 2009 und Vista
 
ANSI

Delphi-Quellcode:
var
  nSize: Cardinal;
  lName: AnsiString;
begin
  nSize := MAX_COMPUTERNAME_LENGTH;
  SetLength(lName, nSize+1);
  if GetComputerNameA(lName, nSize) then
  begin
    SetLength(lName, nSize);
  end;
end;
WIDE

Delphi-Quellcode:
var
  nSize: Cardinal;
  lName: WideString;
begin
  nSize := MAX_COMPUTERNAME_LENGTH;
  SetLength(lName, nSize+1);
  if GetComputerNameW(lName, nSize) then
  begin
    SetLength(lName, nSize);
  end;
end;

Bernhard Geyer 2. Mär 2009 14:21

Re: Computernamen auslesen unter RAD 2009 und Vista
 
Autsch. An den paar Zeilen Code ist so ziemlich alles Falsch was man in Bezug auf Portierung nach D2009 falsch machen kann:

1, Dir sollte klar sein das in D2009 Char = 2Byte hat!
2, String ist ebenfalls jetzt ein Unicodestring mit jedem Zeichen = 2 Byte. Jedoch ist String[Länge] immer noch ein kurzer Ansi-String.
3, Mit Move(...) verwendest du eine Typlose Speicherkopieroperation welche dem Compiler jedliche Chance nimmt dir per Warnung mitzuteilen das hier was nicht passt (Kopieren von PWideChar auf einen Speicherbereich eines AnsiStrings).

Alex_ITA01 2. Mär 2009 14:24

Re: Computernamen auslesen unter RAD 2009 und Vista
 
Danke :-)
Die AnsiVersion von Muetze1 geht :-)
Hatte die Funktionen GetComputerNameA und W gar nicht gesehen...

@Bernhard: Ich weiß, dass dieser Code für 2009 nicht geeignet ist. Es war ja auch ein Beispiel aus 2006 :-)

Danke nochmals


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz