请问如何启用和禁用网络连接?谢谢

huxiaoye 2004-03-02 05:35:09
请问如何启用和禁用网络连接?谢谢
...全文
102 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sczyq 2004-06-15
  • 打赏
  • 举报
回复
15分,糟塌了我的贴子!
hzoll 2004-04-24
  • 打赏
  • 举报
回复
这个也是前人的辛苦成果,好久以前的了,我收藏了一下:)
但好象只能在NT结构的系统中,我自己用,好使的,不过不是紧用网络连接,而是紧用的网卡!
cfgmgr32.h需要安装编写驱动程序的程序,里头有这个文件,考过来,还有cfgmgr32.h里用到的几个文件当然也要考过来啦:)


/*



还是帖出来吧, 我可是花了三天时间才搞定了.



*/



#include <SetupAPI.h>

#include <cfgmgr32.h> // cfgmgr32.h 在Microsoft Windows 2000 DDK 中.

// 要用 CM_Get_DevNode_Status(...) 来查询状态.

//---------------------------------------------------------------------------

typedef struct NetCardStruct

{

DWORD Id; // 网卡设备号

AnsiString Name; // 网卡名

bool Disabled; // 当前是否禁用

bool Changed; // 是否更改过

} TNetCardStruct;

typedef TNetCardStruct* PNetCardStruct;

//---------------------------------------------------------------------------

// EnumNetCards 枚举出网卡

//---------------------------------------------------------------------------

void __fastcall EnumNetCards(TList *NetDeviceList)

{

AnsiString DevValue;

PNetCardStruct NetCard;

DWORD Status, Problem;

LPTSTR Buffer = NULL;

DWORD BufSize = 0;

HDEVINFO hDevInfo = 0;

if (INVALID_HANDLE_VALUE == (hDevInfo =

SetupDiGetClassDevs(NULL,NULL,0,DIGCF_PRESENT|DIGCF_ALLCLASSES)))

return;

SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};

HKEY hKeyClass;

char DeviceName[200];

for (DWORD DeviceId=0;

SetupDiEnumDeviceInfo(hDevInfo,DeviceId,&DeviceInfoData); DeviceId++)

{

if (CM_Get_DevNode_Status(&Status, &Problem,

DeviceInfoData.DevInst,0) != CR_SUCCESS)

continue;



DevValue.SetLength(0);

if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_CLASS , &Buffer, (PULONG)&BufSize))

DevValue = Buffer;

if (DevValue == "Net")

{

DevValue.SetLength(0);

if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_ENUMERATOR_NAME , &Buffer, (PULONG)&BufSize))

DevValue = Buffer;

if (DevValue != "ROOT")

{

NetCard = new TNetCardStruct;

NetCard->Id = DeviceId;

NetCard->Name = "<Unknown Device>";

if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DRIVER , &Buffer, (PULONG)&BufSize))

if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC , &Buffer, (PULONG)&BufSize))

NetCard->Name = Buffer;

NetCard->Disabled = (Status & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problem);

NetCard->Changed = false;

NetDeviceList->Add(NetCard);

}

}

}

}

//---------------------------------------------------------------------------

bool __fastcall GetRegistryProperty(HDEVINFO DeviceInfoSet,

PSP_DEVINFO_DATA DeviceInfoData, ULONG Property, PVOID Buffer, PULONG Length)

{

while (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet,

DeviceInfoData, Property, NULL, (BYTE *)*(TCHAR **)Buffer, *Length, Length))

{

if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)

{

if (*(LPTSTR *)Buffer) LocalFree(*(LPTSTR *)Buffer);

*(LPTSTR *)Buffer = (PCHAR)LocalAlloc(LPTR,*Length);

}

else return false;

}

return (*(LPTSTR *)Buffer)[0];

}

//---------------------------------------------------------------------------

// NetCardStateChange 网卡的启用与禁用

// NetCardPoint 是 PNetCardStruct 的指针.

// Enabled true = 启用 false = 禁用

//---------------------------------------------------------------------------

bool __fastcall NetCardStateChange(void * NetCardPoint, bool Enabled)

{

PNetCardStruct NetCard = (PNetCardStruct)NetCardPoint;

DWORD DeviceId = NetCard->Id;

HDEVINFO hDevInfo = 0;

if (INVALID_HANDLE_VALUE == (hDevInfo =

SetupDiGetClassDevs(NULL,NULL,0,DIGCF_PRESENT|DIGCF_ALLCLASSES)))

return false;

SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};

DWORD Status, Problem;

if (!SetupDiEnumDeviceInfo(hDevInfo,DeviceId,&DeviceInfoData))

return false;



if (CM_Get_DevNode_Status(&Status, &Problem,

DeviceInfoData.DevInst,0) != CR_SUCCESS)

return false;



SP_PROPCHANGE_PARAMS PropChangeParams = {sizeof(SP_CLASSINSTALL_HEADER)};

PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;

PropChangeParams.Scope = DICS_FLAG_GLOBAL;

if (Enabled)

{

if (!((Status & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problem)))

{

NetCard->Disabled = false;

return false;

}

PropChangeParams.StateChange = DICS_ENABLE;

}

else

{

if ((Status & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problem))

{

NetCard->Disabled = true;

return false;

}

if (!((Status & DN_DISABLEABLE) && (CM_PROB_HARDWARE_DISABLED != Problem)))

return false;

PropChangeParams.StateChange = DICS_DISABLE;

}



if (!SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData,

(SP_CLASSINSTALL_HEADER *)&PropChangeParams, sizeof(PropChangeParams)))

return false;

if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &DeviceInfoData))

return false;

if (CM_Get_DevNode_Status(&Status, &Problem,

DeviceInfoData.DevInst,0) == CR_SUCCESS)

NetCard->Disabled = (Status & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problem);

return true;

}

你说怎么使用两个函数:

TList *NetCardList = new TList;
EunmNetCards(NetCardList);

// 列出
for (int i=0; i<NetCardList->Count; i++)
{
PNetCardStruct AStruct = (PNetCardStruct)NetCardList->Items[i];
Memo1->Lines->Add("---------------");
Memo1->Lines->Add("网卡序号:" + IntToStr(i));
Memo1->Lines->Add("网卡设备号: " + IntToStr((int)AStruct->Id));
Memo1->Lines->Add("网卡设备名: " + AStruct->Name);
if (AStruct->Disabled) Memo1->Lines->Add("状态: 禁用");
else Memo1->Lines->Add("状态: 启用");
}


// 删除由EunmNetCards分配的内存
for (int i=0; i<NetCardList->Count; i++)
delete (PNetCardStruct)NetCardList->Items[i];





禁用序号为n的网卡:

NetCardStateChange(NetCardList->Items[n],false);
Android版RAR RARLAB的RAR是一款多功能,原始,免费,简单,轻松,快速的压缩程序,存档器,助手,提取器,管理器,甚至是基本的文件浏览器。 RAR可以创建RAR和ZIP,并解压缩RAR,ZIP,TAR,GZ,BZ2,XZ,7z,ISO,ARJ档案。功能列表包括损坏的ZIP和RAR文件的修复命令,与RARLAB的WinRAR基准兼容的基准功能,恢复记录,常规和恢复卷,加密,可靠的归档文件,利用多个CPU内核压缩数据。 除了标准的ZIP文件外,解压缩功能还支持带有BZIP2,LZMA,PPMd和XZ压缩的ZIP和ZIPX,也作为受密码保护的ZIP。Unrar命令可用于所有版本的RAR归档文件,包括最新的RAR5,受密码保护的文件和多部分文件。 RAR显示广告以支付开发成本。您可以在选项菜单中付款以关闭广告。RAR请求访问网络,查看网络连接和计费以显示或禁用广告。 如果您希望帮助我们将RAR转换为您的语言,请在“ RAR Extras”部分中下载适用于Android的RAR 文件,并按照readme.txt中的说明进行操作。谢谢。 什么是新的: ZIP提取和测试性能在以前的版本中有所下降。现在恢复正常值。 增加了对另一种TAR格式档案的支持。 如果还启用了“测试存档文件”和“创建单独的存档”,则ZIP存档可能会失败。立即修复。 Mod信息: 高级功能已解锁; 完全删除帮助文件夹; 优化的图形/ zipalign; 禁用分析。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧