Смена IP из программы на Delphi

Sterling

Пользователь
Пользователь
27 Фев 2005
31
0
0
Москва
Народ подскажите как такую штуку реализовать в дельфях.
Есть Edit в него вбиваеться ип. Скажем с пробелами или точками. Нажимаешь кнопку и он ставиться в твоей системе в одно из потключений.

Если будут коментарие, то вообще супер!
 
Последнее редактирование модератором:
T

Tasselhof

Гость
еще и смену mac одновременную реализуй :smile:
правда, буду благодарен, ибо уважаю фриварный софт
 

Badger

Пользователь
Пользователь
16 Фев 2005
178
0
0
Sterling сказал(а):
Народ подскажите как такую штуку реализовать в дельфях.
Есть Edit в него вбиваеться ип. Скажем с пробелами или точками. Нажимаешь кнопку и он ставиться в твоей системе в одно из потключений.

Если будут коментарие, то вообще супер!
Неплохо загнул.
Кроме Edit наверное еще должен быть и ComboBox, чтобы указывать, для какого подключения меняешь настройки..
А можно и маску подсети тут же указывать... вдруг тоже изменить захочется...
 

Sterling

Пользователь
Пользователь
27 Фев 2005
31
0
0
Москва
Так и думал, что в нашем форуме такую тему можно было и не писать. :smile: Всем спасибо. Спршу на проф. форумах!
 

firetrap

Активный пользователь
Пользователь
9 Фев 2005
988
11
18
Попробуй через WMI (Windows Management Instrumentation)

класс: Win32_NetworkAdapterConfiguration,
метод: EnableStatic
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/enablestatic_method_in_class_win32_networkadapterconfiguration.asp

Приаттачиваю программу на C# для изменения IP и подсети (работает через WMI, для работы программы необходимо наличие .NET Framework 1.1)
 

stylus

Пользователь
Пользователь
9 Фев 2005
255
0
0
firetrap сказал(а):
Попробуй через WMI (Windows Management Instrumentation)
класс: Win32_NetworkAdapterConfiguration,
метод: EnableStatic
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/enablestatic_method_in_class_win32_networkadapterconfiguration.asp

Приаттачиваю программу на C# для изменения IP и подсети (работает через WMI, для работы программы необходимо наличие .NET Framework 1.1)
А можно на сорцы глянуть
 

firetrap

Активный пользователь
Пользователь
9 Фев 2005
988
11
18
test.rar - сорцы приаттаченного выше примера на c#
wmi.zip - кое-какие сорцы по использованию wmi на дельфях.. там по-моему нужно дополнительно симпортировать библиотеку типов <Windows System32>\wbem\wbemdisp.tlb


а вообще можно сделать проще:

shellexecute(handle,'open','netsh.exe',
'interface ip set address "Local Area Connection" ' +
'static 192.168.0.1 255.255.255.0 192.168.0.2 1',
nil,sw_hide);
 
Последнее редактирование модератором:

Sterling

Пользователь
Пользователь
27 Фев 2005
31
0
0
Москва
unit Inet;

interface

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

type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ComboBox1Select(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
IList: TStringList;
implementation

{$R *.dfm}

function ReadIP(key:string):string;
const
ifs='SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces';
var
reg: HKey;
DataType, DataSize: DWORD;
s: string;
begin
result:='';
s:=ifs+'\'+key;
if RegOpenKeyEx(HKEY_local_machine,PAnsiChar(s),0,KEY_QUERY_VALUE,reg)=ERROR_SUCCESS then
begin
RegQueryValueEx(reg,'IPAddress',nil,@DataType,nil,@DataSize);
SetLength(s, DataSize-1);
RegQueryValueEx(reg,'IPAddress',nil,@DataType,PByte(@s[1]),@DataSize);
result:=s;
end;
RegCloseKey(reg);
end;

procedure SetIP(key,value:string);
const
ifs='SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces';
var
reg: HKey;
begin
if RegOpenKeyEx(HKEY_LOCAL_MACHINE,PAnsiChar(ifs+'\'+key),0,KEY_SET_VALUE,reg)=ERROR_SUCCESS then
RegSetValueEx(reg,'IPAddress',0,REG_MULTI_SZ,PAnsiChar(value),Length(value));
RegCloseKey(reg);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if ComboBox1.Items.Count=0 then Exit;
SetIP(IList[ComboBox1.itemIndex],Edit1.Text);
Edit1.Text:=ReadIP(IList[ComboBox1.ItemIndex]);
end;

procedure TForm1.FormCreate(Sender: TObject);
const
nwc='SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards';
var
card,reg: HKey;
DataType, DataSize: DWORD;
buf: array[0 .. 1000] of char;
index: longint;
s: string;
begin
IList:=TStringList.Create;
RegOpenKey(HKEY_local_machine, nwc, card);
index:=0;
while RegEnumKey(card, index, buf, Sizeof(buf))=ERROR_SUCCESS do
begin
if RegOpenKeyEx(card,buf,0,KEY_QUERY_VALUE,reg)=ERROR_SUCCESS then
begin
RegQueryValueEx(reg,'Description',nil,@DataType,nil,@DataSize);
SetLength(s, DataSize-1);
RegQueryValueEx(reg,'Description',nil,@DataType,PByte(@s[1]),@DataSize);
ComboBox1.Items.Add(s);
RegQueryValueEx(reg,'ServiceName',nil,@DataType,nil,@DataSize);
SetLength(s, DataSize-1);
RegQueryValueEx(reg,'ServiceName',nil,@DataType,PByte(@s[1]),@DataSize);
IList.Add(s);
RegCloseKey(reg);
end;
inc(index);
end;
RegCloseKey(card);
With ComboBox1 do if Items.Count>0 then begin
ItemIndex:=0;
Edit1.Text:=ReadIP(IList[0]);
end;
end;

procedure TForm1.ComboBox1Select(Sender: TObject);
begin
if ComboBox1.Items.Count=0 then Exit;
Edit1.Text:=ReadIP(IList[ComboBox1.ItemIndex]);
Button1.Enabled:=true;
end;

end.
 

Sterling

Пользователь
Пользователь
27 Фев 2005
31
0
0
Москва
Но у меня косяк он помимо того что меняет ип, еще добовляет его в список ипов карточки!. Свойство сетевого окружения -> TCP/IP -> Дополнительно.
 

[email protected]

Пользователь
Пользователь
10 Фев 2005
118
0
0
Sterling сказал(а):
Но у меня косяк он помимо того что меняет ип, еще добовляет его в список ипов карточки!. Свойство сетевого окружения -> TCP/IP -> Дополнительно.
Данный код IP не меняет. Меняеются только параметры в реестре. Чтобы изменения вошли в силу, надо перезагружать компьютер.

ps Просьба выкладывать так же файлы проекта, а не просто код постить. Редактировать неудобно.
 

Sterling

Пользователь
Пользователь
27 Фев 2005
31
0
0
Москва
А как же поменять ип без перезагрузки? Стандартными то средствами когда меняешь перезагрузка не нужна. Может надо использовать, что-то другое?