Ver Mensaje Individual
  #3  
Antiguo 27-05-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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);
      // Asignar valores
      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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita