Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

как отключить и включить подключение сети программно [D6, D7, Win   Найти похожие ветки 

 
chips   (2004-03-17 13:04) [0]

есть ли команда API ?


 
chips   (2004-03-17 13:04) [0]

есть ли команда API ?


 
BiN ©   (2004-03-17 14:10) [1]

http://www.xprogramming.ru/Articles/NetTests.html


 
BiN ©   (2004-03-17 14:10) [1]

http://www.xprogramming.ru/Articles/NetTests.html


 
Denton ©   (2004-03-17 20:30) [2]

Эта штука не раборает!!


 
Denton ©   (2004-03-17 20:30) [2]

Эта штука не раборает!!


 
Rouse_ ©   (2004-03-17 23:03) [3]

> [2] Denton ©   (17.03.04 20:30)
Еще б она работала - выпрямитель ищи... (код не стандартный :)


 
Rouse_ ©   (2004-03-17 23:03) [3]

> [2] Denton ©   (17.03.04 20:30)
Еще б она работала - выпрямитель ищи... (код не стандартный :)


 
Verg ©   (2004-03-18 09:24) [4]

Ух ты. Не работает. Значит дурят нашего брата :)
Вот все дурят и дурят....

Давайте проверим.
Ниже код для 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.


 
Verg ©   (2004-03-18 09:24) [4]

Ух ты. Не работает. Значит дурят нашего брата :)
Вот все дурят и дурят....

Давайте проверим.
Ниже код для 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.


 
chips   (2004-03-18 13:54) [5]

Под win2000 работает. Буду изучать мат часть. :-))


 
chips   (2004-03-18 13:54) [5]

Под win2000 работает. Буду изучать мат часть. :-))


 
Dentom   (2004-03-19 00:22) [6]

блин ну я не доганяю что оно делает сеть как работала так и работает????? обьясните пожалуста мне деревянному


 
Dentom   (2004-03-19 00:22) [6]

блин ну я не доганяю что оно делает сеть как работала так и работает????? обьясните пожалуста мне деревянному



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.035 c
3-1081689688
Smile)))
2004-04-11 17:21
2004.05.09
Выделить в DBGRID всю строку


14-1081963920
RealRascal
2004-04-14 21:32
2004.05.09
Замена блокноту


1-1082565969
Bestden
2004-04-21 20:46
2004.05.09
Как с помощью цикла перевести из десятка edit в массив?


8-1076701704
Сережа
2004-02-13 22:48
2004.05.09
ImageList


14-1080142691
panov
2004-03-24 18:38
2004.05.09
Двадцатка самых популярных вопросов.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский