Главная страница
    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.055 c
9-1069953412
Stilgar
2003-11-27 20:16
2004.05.09
Дайте пару советов новичку.


3-1081520702
Наташулечка
2004-04-09 18:25
2004.05.09
Выборка значений


7-1080200894
neodiX
2004-03-25 10:48
2004.05.09
Как из сервиса определить залогинился юзер или нет?


14-1082357165
MalkoLinge
2004-04-19 10:46
2004.05.09
Выжившие Есть ? После Встречи в Реале


3-1081842986
avgur
2004-04-13 11:56
2004.05.09
Константы для Delphi 6.0





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский