Главная страница
    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.05 c
1-1082700391
Rant
2004-04-23 10:06
2004.05.09
WebBrowser


14-1082361946
zzet
2004-04-19 12:05
2004.05.09
Испания выводит войска из Ирака.


4-1079858504
tytus
2004-03-21 11:41
2004.05.09
Как перехватить сообщения WM_VSCROLL и WM_HSCROLL?


8-1076437640
Novichok
2004-02-10 21:27
2004.05.09
Как поменять икогку у exe файла


3-1081825030
rosl
2004-04-13 06:57
2004.05.09
ehlib





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