Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Подключение по локальной сети

3.7K
04 декабря 2006 года
_lobster_
115 / / 10.04.2005
Пишу собственную программу по удаленному администрированию. Вот и столкнулся с такой проблемой: нужной отслеживать подключение по локальной сети, т.е. проверять включено оно или нет, если выключено, то надо как-то программно включить. Видел, что при отключении в диспетчере устройств состояние сетевой карты принимает вид: Устройство отключено. (Код 22), как я понял, останавливается драйвер (все перепробовал, так его программно и не запустил). За ранее благодарен хоть за какой-нибудь намек по этой теме.
354
05 декабря 2006 года
ШпиЁн
468 / / 19.02.2006
Вот пример как включить\отключить сетевую карту, через SetupApi.
Программка вначале вырубает сетевушку(она должна быть включена), ждет 10 секунд, потом запускает ее заново.:)))

Есть один глюк - если сетевая изначально выключена - почему-то таким способом ее не включить(ошибок в коде вроде нет, и при работе прожки ошибки не появляются - все функции вызываются и возвращают нормальные результаты)...

Уважаемые гуру программирования!:))) может быть вы знаете в чем дело?
29K
02 июля 2007 года
JxUejq
2 / / 06.05.2007
вот так работает в билдере ;)

Код:
//---------------------------------------------------------------------------
bool __fastcall TForm1::enable_adapter(bool enable)
{
HDEVINFO Devs=INVALID_HANDLE_VALUE;
wchar_t * CLASSID_NetworkAdapter = L"{4d36e972-e325-11ce-bfc1-08002be10318}";

GUID guid;
CLSIDFromString(CLASSID_NetworkAdapter, &guid);

Devs = SetupDiGetClassDevs(&guid, NULL, NULL, DIGCF_PRESENT);
if (Devs == INVALID_HANDLE_VALUE) goto failed;

SP_DEVINFO_DATA devInfo;
devInfo.cbSize = sizeof(SP_DEVINFO_DATA);

if (!SetupDiEnumDeviceInfo(Devs, 0, &devInfo))   goto failed;
else // имя
    {
    char buff[256];
    DWORD lenbuff;
    SetupDiGetDeviceRegistryProperty(Devs, &devInfo, SPDRP_SERVICE, NULL, (byte *)buff, 256, &lenbuff);
        LabelResult->Caption = "device: "+(AnsiString) buff ;
    }

SP_PROPCHANGE_PARAMS pcp;
       
if(enable){
    pcp.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
    pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
        pcp.StateChange = enable ? DICS_ENABLE : DICS_DISABLE;
        pcp.Scope = DICS_FLAG_GLOBAL;
    pcp.HwProfile = 0;

    if (SetupDiSetClassInstallParams(Devs, &devInfo, &pcp.ClassInstallHeader, sizeof(pcp)))
                SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, Devs, &devInfo);
        }

pcp.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
pcp.StateChange = enable ? DICS_ENABLE : DICS_DISABLE;
pcp.Scope = DICS_FLAG_CONFIGSPECIFIC;
pcp.HwProfile = 0;

if(!SetupDiSetClassInstallParams(Devs,&devInfo,&pcp.ClassInstallHeader,sizeof(pcp)) ||
   !SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,Devs,&devInfo))
         // failed to invoke DIF_PROPERTYCHANGE
         goto failed;

SP_DEVINSTALL_PARAMS devParams;
devParams.cbSize = sizeof(devParams);
if(SetupDiGetDeviceInstallParams(Devs,&devInfo,&devParams) && (devParams.Flags & (DI_NEEDRESTART|DI_NEEDREBOOT))){
         // see if device needs reboot
         ShowMessage("see if device needs reboot");
         goto failed;
         }
//else     ;// appears to have succeeded
LabelResult->Caption = LabelResult->Caption +" - "+IntToStr(enable) ;
//enable ? " enabled!" : " disabled!";

SetupDiDestroyDeviceInfoList(Devs);
return true;
failed:
SetupDiDestroyDeviceInfoList(Devs);
return false;
}
//---------------------------------------------------------------------------
30K
13 сентября 2007 года
ApSerg
1 / / 28.06.2007
Цитата: ШпиЁн

Есть один глюк - если сетевая изначально выключена - почему-то таким способом ее не включить(ошибок в коде вроде нет, и при работе прожки ошибки не появляются - все функции вызываются и возвращают нормальные результаты)...

Уважаемые гуру программирования!:))) может быть вы знаете в чем дело?



Так решение найдено или нет. Меня это сильно интересует.

29K
14 сентября 2007 года
JxUejq
2 / / 06.05.2007
У меня и включает и отключает сетевушку с вышеприведенным моим кодом, с одним условием что в системе находится одна сетевая карта. доробатывал код на основе сырцов devcon.
Что бы обрабатывалось нужное устройство, тогда надо зделать так
Devs = SetupDiGetClassDevs(NULL, cPNPid, NULL, DIGCF_ALLCLASSES);
где cPNPid - id устройства в системе, вроде этого PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог