Главная страница
    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
1-1082964495
Серж
2004-04-26 11:28
2004.05.09
CASE для Дельфи


1-1082471366
ReNoiZer
2004-04-20 18:29
2004.05.09
компиляция midas и dbExpress dll s прямо в приложение...


6-1079365312
Denis_Visma
2004-03-15 18:41
2004.05.09
Замена компонентам TNMSMTP


14-1082547606
Knight
2004-04-21 15:40
2004.05.09
Можно ли редактировать набор кнопок в диалогах сохранения...


1-1082446133
Talle
2004-04-20 11:28
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский