Otra opción (siempre muy socorrida) es recurrir a
WMI.
La clase
Win32_ComputerSystem, nos permite obtener esa información del equipo.
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Y además entre los métodos que posee hay uno llamado
Rename:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Utilizando un código como este puedes obtener el npombre actual del equipo:
Código Delphi
[-]
var
sWbemLocator : OLEVariant;
sWMIService : OLEVariant;
sWbemObjectSet: OLEVariant;
sWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin;
try
CoInitialize(nil);
try
sWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
sWMIService := sWbemLocator.ConnectServer('', 'root\CIMV2', '', '');
sWbemObjectSet:= sWMIService.ExecQuery('SELECT * FROM Win32_ComputerSystem','WQL');
oEnum := IUnknown(sWbemObjectSet._NewEnum) as IEnumVariant;
if oEnum.Next(1, sWbemObject, iValue) = 0 then
Edit1.Text := sWbemObject.Properties_.Item('Name').Value;
finally
CoUninitialize;
end;
except
on E:Exception do
ShowMessage('Error al obtener el valor; ' + E.ClassName + '-' + E.Message);
end;
Y usando uno como este puedes cambiar el actual nombre, por uno nuevo:
Código Delphi
[-]
var
sWbemLocator:ISWbemLocator;
sWMIService:ISWbemServices;
FWbemObject:ISWbemObject;
Parametros:ISWbemObject;
res:ISWbemObject;
param:OleVariant;
rValue:integer;
begin
try
CoInitialize(nil);
try
sWbemLocator := CoSWbemLocator.Create;
sWMIService := sWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '', '', '', 0, nil);
FWbemObject := sWMIService.Get('Win32_ComputerSystem.Name="'+ Edit1.Text + '"',0,nil);
Parametros := FWbemObject.Methods_.Item('Rename',0).InParameters.SpawnInstance_(0);
param := Edit2.Text;
Parametros.Properties_.Item('Name', 0).Set_Value(param);
param :='XXX';
Parametros.Properties_.Item('Password', 0).Set_Value(param);
param :='XXX';
Parametros.Properties_.Item('UserName', 0).Set_Value(param);
res := sWMIService.ExecMethod('Win32_ComputerSystem.Name="'+ Edit1.Text + '"', 'Rename', Parametros, 0, nil);
rValue := res.Properties_.Item('ReturnValue',0).Get_Value;
if (rValue = 0) then begin
ShowMessage('Correcto');
end
else begin
ShowMessage('Se ha producido un error; Resultado: ' + IntToStr(rValue));
end;
except
on E:EOleException do
Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
finally
CoUninitialize;
end;
Pon un formulario con un par de edits y añade ese código:
Una vez que lo cambies, puedes ver el resultado en la ventana de sistema:
Debes añadir al uses:
Código Delphi
[-]
uses
Diagnostics,
ActiveX,
ComObj,
WbemScripting_TLB
El ejemplo completo lo he subido al ftp.