Смена IP адреса

Материал из DRKB


{ Programmed Malomush Vladimir. Ukraine, Cherkassy vovs@neocm.com
 IP tools unit for set IP and Mask of network connection fo Win9X & NT Platforms
}
unit Iptools;

interface

uses 
  Windows, Registry, SysUtils, Variants, Classes, Dialogs, ShellApi;

var
  Registry1: TRegistry;
  KeysList: TStrings;
  P: Pointer;

procedure Set_IP_AND_MASK98(IP, Mask: string);
procedure Set_IP_AND_MASKXP(IP, Mask: string);
procedure Set_IP_AND_MASK (IP, Mask: string);
function GetWinVersion: string;

implementation

function GetWinVersion: string;
var
  VersionInfo: TOSVersionInfo;
  OSName: string;
begin
  VersionInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);

  if Windows.GetVersionEx(VersionInfo) then
  begin
    with VersionInfo do
    begin
      case dwPlatformId of
        VER_PLATFORM_WIN32s        : OSName := 'Win32s';
        VER_PLATFORM_WIN32_WINDOWS : OSName := 'Windows 95';
        VER_PLATFORM_WIN32_NT      : OSName := 'Windows NT';
      end;
      // Result := OSName + ' Version ' + IntToStr( dwMajorVersion ) + '.' + IntToStr( dwMinorVersion ) +
      //         #13#10' (Build ' + IntToStr( dwBuildNumber ) + ': ' + szCSDVersion + ')';
      Result:= OSName;
    end;
  end
  else
    Result := '';
end;

//--------- Procedure for windowsXP -------------------
procedure Set_IP_AND_MASKXP(IP, Mask: string);
var
  i, NumDev: Integer;
  p: PChar;
  s: string;
begin
  // Initialization----------------------------------------
  s := 'netsh interface ip set address "Подключение по локальной сети" source=static addr='
     + IP + ' mask=' + Mask;
  p := PChar(s);
  WinExec(@p[0], sw_show);
  Beep;
end;

//--------- Procedure for windows98 -------------------
procedure Set_IP_AND_MASK98(IP, Mask: string);
var
  i, NumDev: Integer;
begin
  // Initialization----------------------------------------
  KeysList := TStringList.Create;
  Registry1 := TRegistry.Create;
  try
    // Detect net devices------------------------------------
    Registry1.RootKey := hkey_local_machine;
    Registry1.OpenKey('System\CurrentControlSet\Services\Class\Net', True);
    Registry1.GetKeyNames(Keyslist);
    Registry1.CloseKey;
    // Detect phisical net device-----------------------------
    for I := 0 to KeysList.Count-1 do
    begin
      Registry1.OpenKey('System\CurrentControlSet\Services\Class\Net\' + KeysList.Strings[i], True);
      if Registry1.ValueExists('IOBaseAddress') then NumDev := I;
      Registry1.CloseKey;
    end;
    // Open device  & set setings------------------------------
    Registry1.OpenKey('System\CurrentControlSet\Services\Class\NetTrans\' + KeysList.Strings[NumDev], True);
    Registry1.WriteString('IPAddress', IP);
    Registry1.WriteString('IPMask', Mask);
    Registry1.CloseKey;
    Beep;
    MessageDlg('Все изменения вступят в силу только после перезагрузки.', mtInformation, [mbOk], 0);
  finally
    // Deinitialization--------------------------------------
    Registry1.Free;
    Keyslist.Free;
  end;
end;

procedure Set_IP_AND_MASK(IP, Mask: string);
var
  s: string;
begin
  s := GetWinVersion;
  if s = 'Windows 95' then Set_IP_AND_MASK98(IP, Mask);
  if s = 'Windows NT' then Set_IP_AND_MASKXP(IP, Mask);
end;

end.


Author: vovs
Source: http://forum.sources.ru
ID: 03357