![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как отключить и включить подключение сети программно [D6, D7, Win [D6, D7, Win95/98, NT4, Win2k, WinXP]
chips © (2004-03-17 13:04:00)есть ли команда API ?
Dentom (2004-03-19 00:22:00) [1]блин ну я не доганяю что оно делает сеть как работала так и работает????? обьясните пожалуста мне деревянному
chips (2004-03-18 13:54:00) [2]Под win2000 работает. Буду изучать мат часть. :-))
Verg (2004-03-18 09:24:00) [3]Ух ты. Не работает. Значит дурят нашего брата :)
Вот все дурят и дурят....
Давайте проверим.
Ниже код для 98-ой и выше, который следует запускать с параметром ON или OFF.
Сделаем опрос - у кого сработал, т.е. сетевой интерфейс перестал функционировать при запуске с параметром OFF, а у кого нет.
(Перед ответом не забудте запустить его же с параметром ON :) ))
program IfControl;
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils,
WinSock;
const
MIB_IF_ADMIN_STATUS_UP = 1;
MIB_IF_ADMIN_STATUS_DOWN = 2;
MIB_IF_ADMIN_STATUS_TESTING = 3;
MAX_INTERFACE_NAME_LEN = 256;
MAX_TRANSPORT_NAME_LEN = 40;
MAX_MEDIA_NAME = 16;
MAX_PORT_NAME = 16;
MAX_DEVICE_NAME = 128;
MAX_PHONE_NUMBER_LEN = 128;
MAX_DEVICETYPE_NAME = 16;
MAXLEN_IFDESCR = 256;
MAXLEN_PHYSADDR = 8;
type
TMIB_IFROW = record
wszName : array[0..MAX_INTERFACE_NAME_LEN-1] of widechar;
dwIndex,
dwType,
dwMtu,
dwSpeed,
dwPhysAddrLen : DWORD;
bPhysAddr : array[0..MAXLEN_PHYSADDR-1] of BYTE;
dwAdminStatus,
dwOperStatus,
dwLastChange,
dwInOctets,
dwInUcastPkts,
dwInNUcastPkts,
dwInDiscards,
dwInErrors,
dwInUnknownProtos,
dwOutOctets,
dwOutUcastPkts,
dwOutNUcastPkts,
dwOutDiscards,
dwOutErrors,
dwOutQLen,
dwDescrLen : DWORD;
bDescr : array[0..MAXLEN_IFDESCR-1] of BYTE;
end;
PMIB_IFROW = ^TMIB_IFROW;
var
InetIFMIB_ROW : TMIB_IFROW;
function GetBestInterface(
dwDestAddr : DWORD; // destination IP address
var pdwBestIfIndex : DWORD // index of interface with the best route
) : DWORD; stdcall; external 'iphlpapi.dll';
function SetIfEntry(pIfRow : PMIB_IFROW // specifies interface and status
): DWORD; stdcall; external 'iphlpapi.dll';
begin
{ TODO -oUser -cConsole Main : Insert code here }
try
if ParamCount < 1 then
begin
Writeln('ON/OFF parameter required');
exit;
end;
Fillchar(InetIFMIB_ROW, sizeof(InetIFMIB_ROW), 0);
if GetBestInterface( INADDR_ANY, InetIFMIB_ROW.dwIndex ) <> NO_ERROR then
begin
Writeln(SysErrorMessage(GetLastError));
exit;
end;
if AnsiUpperCase(ParamStr(1)) <> 'OFF' then
InetIFMIB_ROW.dwAdminStatus := MIB_IF_ADMIN_STATUS_UP
else
InetIFMIB_ROW.dwAdminStatus := MIB_IF_ADMIN_STATUS_DOWN;
if SetIfEntry(@InetIFMIB_ROW)<> NO_ERROR then
begin
Writeln(SysErrorMessage(GetLastError));
exit;
end;
Writeln('OK');
finally
Readln;
end;
end.
Rouse_ (2004-03-17 23:03:00) [4]> [2] Denton © (17.03.04 20:30)
Еще б она работала - выпрямитель ищи... (код не стандартный :)
Denton (2004-03-17 20:30:00) [5]Эта штука не раборает!!
BiN (2004-03-17 14:10:00) [6]http://www.xprogramming.ru/Articles/NetTests.html