Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiar la dirección IP y/o servidor dns de un adaptador (lo mismo wifi que ethernet) (https://www.clubdelphi.com/foros/showthread.php?t=93225)

Jcg-Guirola 21-06-2018 16:58:45

Cambiar la dirección IP y/o servidor dns de un adaptador (lo mismo wifi que ethernet)
 
Hola, es estado buscando en el foro y he visto preguntas parecidas sin respuestas así que lo más seguro es que no se pueda hacer, aún así son del año 2005 o 2006 y tal vez ya saben como hacerlo, lo que necesito es cambiar la dirección IP y/o servidor dns de un adaptador (lo mismo wifi que ethernet). Gracias
Disculpen si subo el mismo hilo dos veces pero es que la conexión está lenta y creo que se cayó cuando le di enviar tema en el hilo anterior

duilioisola 21-06-2018 19:20:21

Puedes probar esto. Utiliza la clase WMI (Windows Management Instrumentation), que te da información del sistema y además puedes cambiarla.

En la web de Neftali hay información: https://neftali.clubdelphi.com/wmi-%...-introduccion/
Creo que tiene una librería por allí, que quizas te sirva de algo.

Código de StackOverflow:
https://stackoverflow.com/questions/...ogrammatically
Código Delphi [-]
{$APPTYPE CONSOLE}

{$R *.res}

uses
  SysUtils,
  ActiveX,
  Variants,
  ComObj;

procedure  SetStaticIpAddress(const NetworkCard, IPAddress, Mask :string);
const
  WbemUser    ='';
  WbemPassword='';
  WbemComputer='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator   : OLEVariant;
  FWMIService     : OLEVariant;
  FWbemObjectSet  : OLEVariant;
  FWbemObject     : OLEVariant;
  FOutParams      : OLEVariant;
  vIpAddress      : OLEVariant;
  vMask           : OLEVariant;
  oEnum           : IEnumvariant;
  iValue          : LongWord;
begin
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);

  FWbemObjectSet:= FWMIService.ExecQuery(Format('SELECT * FROM Win32_NetworkAdapterConfiguration Where Description="%s"',[NetworkCard]),'WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  if oEnum.Next(1, FWbemObject, iValue) = 0 then
  begin
    vIpAddress   := VarArrayCreate([0, 0], varVariant);
    vIpAddress[0]:= IPAddress;
    vMask   := VarArrayCreate([0, 0], varVariant);
    vMask[0]:=  Mask;
    FOutParams:=FWbemObject.EnableStatic(vIpAddress, vMask);
    // 0 - Successful completion, no reboot required
    // 1 - Successful completion, reboot required
    Writeln(Format('ReturnValue  %s',[FOutParams]));
  end
  else
  Writeln('Network card not found');
end;

begin
 try
    CoInitialize(nil);
    try
      SetStaticIpAddress('Network card name','192.168.1.1','255.255.255.0');
    finally
      CoUninitialize;
    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;
 Writeln('Press Enter to exit');
 Readln;
end.

Jcg-Guirola 21-06-2018 21:25:50

Gracias
 
Voy a probar eso y te digo, muchas gracias, en otro hilo había preguntado como cambiar proxy del sistema pero dice que lo han movido y me redirecciona aquí así que aquí pongo como lo solucioné:
Lo que hice fue cambiar el proxy directamente desde el regedit de esta forma

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,registry, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var reg: TRegistry;
begin
  reg:= TRegistry.Create;
  reg.RootKey := HKEY_CURRENT_USER;
  reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Internet Settings', True);
  reg.WriteString('ProxyServer','proxy.unica.cu:3128');
  reg.CloseKey;

 end;

end.

voy a buscar quizás pueda hacer lo mismo con el ip

Jcg-Guirola 22-06-2018 00:59:19

encontré justo lo que estoy buscando en http://delphiaccess.com/foros/index....-desde-delphi/ el problema es que necesito poder decir a cual adaptador quiero cambiarle el ip aver si algunos de ustedes puede, yo no se mucho de programación todavía y no pude comprender completamente el código

Jcg-Guirola 22-06-2018 16:49:20

Ya probé el de duilioisola solo hecho en falta lo de configurar el gateway per está ok muchas gracias, me demoré un poco porque me daba error y era que no me había fijado que estaba en consola, es que aún no se mucho, cuando me di cuenta lo adapté y perfecto

Jcg-Guirola 22-06-2018 17:23:14

Bueno me he pues a revisar el de duilioisola y este y al final agregué el gateway me quedó así
Código Delphi [-]
uses
   ActiveX,
   ComObj;

procedure  SetStaticIpAddress(const NetworkCard, IPAddress,Mask,gateway:string);

const
  WbemUser    ='';
  WbemPassword='';
  WbemComputer='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator   : OLEVariant;
  FWMIService     : OLEVariant;
  FWbemObjectSet  : OLEVariant;
  FWbemObject     : OLEVariant;
  FOutParams      : OLEVariant;
  vIpAddress      : OLEVariant;
  vMask           : OLEVariant;
  vgateway        : OLEVariant;
  oEnum           : IEnumvariant;
  iValue          : LongWord;
  begin
begin
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);

  FWbemObjectSet:= FWMIService.ExecQuery(Format('SELECT * FROM Win32_NetworkAdapterConfiguration Where Description="%s"',[NetworkCard]),'WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  if oEnum.Next(1, FWbemObject, iValue) = 0 then
  begin
    vIpAddress   := VarArrayCreate([0, 0], varVariant);
    vIpAddress[0]:= IPAddress;
    vMask   := VarArrayCreate([0, 0], varVariant);
    vMask[0]:=  Mask;
     vgateway   := VarArrayCreate([0, 0], varVariant);
     vgateway[0]:=   gateway;
    FOutParams:=FWbemObject.EnableStatic(vIpAddress, vMask);
    FOutParams:=FWbemObject.setgateways(vgateway);
    // 0 - Successful completion, no reboot required
    // 1 - Successful completion, reboot required
  showmessage(Format('ReturnValue  %s',[FOutParams]));
  end
  else
 showmessage('Network card not found');
end;


  end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 SetStaticIpAddress('Atheros AR8131 PCI-E Gigabit Ethernet Controller (NDIS 6.20)','10.2.4.3','255.255.255.0','10.1.1.1');
end;

end.


La franja horaria es GMT +2. Ahora son las 06:48:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi