Смена 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