
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.82] |
![]() |
|
Сообщ.
#1
,
|
|
|
Как можно программно поменять IP адрес и прочие его приблуды (Default gateway, prim DNS, sec DNS, etc.)?
Нашел нужные настрокй в реестре, но при их смене не происходит перенастройки адаптера. Нужно перезагружатья... ![]() Но ведь вся прелесть XP и 2k в том, что эти настройки можно применить без перезагрузки! Так как это сделать? ![]() |
Сообщ.
#2
,
|
|
|
Нашел один метод, но он не совсем программный. Это все можно сделать с помощью netsh (консольной утилиты).
Но мне этот способ не нравиться. Должен же быть API!.. Кстати, как можно задать настройку прокси для инета (по локалке)? |
![]() |
Сообщ.
#3
,
|
|
ну этот NETSH импортирует не так много функций.. я бы посмотрел в сторону MprXXX - функций...
|
![]() |
Сообщ.
#4
,
|
|
ммм... Да вообще очень много чего разные библиотеки импортируют. Гадать чтоли будете?
Вот тебе из "iphlpapi.dll" ![]() ![]() typedef DWORD (WINAPI *_SetAdapterIpAddress )( char *szAdapterGUID, DWORD dwDHCP, DWORD dwIP, DWORD dwMask, DWORD dwGateway ); |
Сообщ.
#5
,
|
|
|
Rouse А этот способ подойдет если на сетевой карте закреплены несколько ip ?
|
Сообщ.
#6
,
|
|
|
Цитата Rouse_ @ Я когда только начал копать как раз в мсдн нашел эти функции. Но вот беда, в дельфи они не объявлены... А вручную подключать из библиотек - лень... Вот тебе из "iphlpapi.dll" |
![]() |
Сообщ.
#7
,
|
|
ищи заголовки тогда %) или тоже лень?
![]() |
Сообщ.
#8
,
|
|
|
Цитата D[u]fa @ ищи заголовки тогда %) или тоже лень? ![]() Просто программа этого не стоит. К тому же сейчас у меня нет времени на такие усилия по ней. Если кто кинет в меня заголовочными файлами от iphlpapi.dll (*.pas), буду очень благодарен. ![]() |
![]() |
Сообщ.
#9
,
|
|
тебе надо качнуть jwa заголовки а конкретно JwaIpHlpApi.pas, поищи в поисковике, или потом выложу если не найдешь
|
Сообщ.
#10
,
|
|
|
А в JediAPI есть к ней заголовки? Где-то она у меня валялась...
|
Сообщ.
#11
,
|
|
|
![]() ![]() const MAX_ADAPTER_NAME_LENGTH = 256; MAX_ADAPTER_DESCRIPTION_LENGTH = 128; MAX_ADAPTER_ADDRESS_LENGTH = 8; IPHelper = 'iphlpapi.dll'; MIB_IF_TYPE_OTHER = 1; MIB_IF_TYPE_ETHERNET = 6; MIB_IF_TYPE_TOKENRING = 9; MIB_IF_TYPE_FDDI = 15; MIB_IF_TYPE_PPP = 23; MIB_IF_TYPE_LOOPBACK = 24; MIB_IF_TYPE_SLIP = 28; type time_t = Longint; IP_ADDRESS_STRING = record S: array [0..15] of Char; end; IP_MASK_STRING = IP_ADDRESS_STRING; PIP_MASK_STRING = ^IP_MASK_STRING; PIP_ADDR_STRING = ^IP_ADDR_STRING; IP_ADDR_STRING = record Next: PIP_ADDR_STRING; IpAddress: IP_ADDRESS_STRING; IpMask: IP_MASK_STRING; Context: DWORD; end; PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO; IP_ADAPTER_INFO = record Next: PIP_ADAPTER_INFO; ComboIndex: DWORD; AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char; Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char; AddressLength: UINT; Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE; Index: DWORD; Type_: UINT; DhcpEnabled: UINT; CurrentIpAddress: PIP_ADDR_STRING; IpAddressList: IP_ADDR_STRING; GatewayList: IP_ADDR_STRING; DhcpServer: IP_ADDR_STRING; HaveWins: BOOL; PrimaryWinsServer: IP_ADDR_STRING; SecondaryWinsServer: IP_ADDR_STRING; LeaseObtained: time_t; LeaseExpires: time_t; end; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); function GetAdapterGUID: String; private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation function SetAdapterIpAddress(szAdapterGUID: PChar; dwDHCP, dwIP, dwMask, dwGateway: DWORD): DWORD; stdcall; external 'iphlpapi.dll'; function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; var pOutBufLen: ULONG): DWORD; stdcall; external IPHelper; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var InterfaceInfo, TmpPointer: PIP_ADAPTER_INFO; Len: Cardinal; strl: TStringList; begin try strl := TStringList.Create; strl.Text := GetAdapterGUID; if strl.Count > 0 then SetAdapterIpAddress(PChar(strl.Strings[0]),0,0,inet_addr('255.255.255.0'),inet_addr('198.162.0.147')); finally strl.Free; end; end; function TForm1.GetAdapterGUID: String; var InterfaceInfo, TmpPointer: PIP_ADAPTER_INFO; IP: PIP_ADDR_STRING; Len: ULONG; AdapterType: String; begin if GetAdaptersInfo(nil, Len) = ERROR_BUFFER_OVERFLOW then begin GetMem(InterfaceInfo, Len); try if GetAdaptersInfo(InterfaceInfo, Len) = ERROR_SUCCESS then begin TmpPointer := InterfaceInfo; repeat if Result <> '' then Result := Result+#13#10; Result := Result+TmpPointer^.AdapterName; TmpPointer := TmpPointer.Next; until TmpPointer = nil; end; finally FreeMem(InterfaceInfo); end; end; end; |
Сообщ.
#12
,
|
|
|
что то поменялось с тех времен. не работает функция. получаю ошибку 87
|
Сообщ.
#13
,
|
|
|
Цитата код ошибки указывает на то, что программисты уже не те. вот что поменялось. что то поменялось с тех времен. не работает функция. получаю ошибку 87 |
![]() |
Сообщ.
#14
,
|
|
Цитата Маршал @ код ошибки указывает на то, что программисты уже не те. вот что поменялось. Красиво ![]() |