社区
通信技术
帖子详情
如何禁用网卡
winter_leaf_wei
2003-11-05 09:37:37
加精
如何在w2k和98下编程禁用网卡哪?!!
...全文
521
4
打赏
收藏
如何禁用网卡
如何在w2k和98下编程禁用网卡哪?!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
winter_leaf_wei
2003-11-12
打赏
举报
回复
但是这段代码好像仅仅可以在98下使用呀
写错了,我是想说这段代码好像不能在98用呀
hiqin
2003-11-12
打赏
举报
回复
小女子无知,请问诸位朋友这是用什么语言做的,有点像C但不是是吧?我还想再问一下这段程序在DOS状态下用吗?让大家见笑了,我懂得很少不过很想多知道一点,可以帮我吗?
winter_leaf_wei
2003-11-05
打赏
举报
回复
但是这段代码好像仅仅可以在98下使用呀
netsys2
2003-11-05
打赏
举报
回复
本文来自FAQ
Q : 如何编程控制网络连接(自动禁用和启用)?
主要解答者: sczyq 提交人: warton
感谢: sczyq
审核者: ccrun 论坛对应贴子: 查看
A :
如何编程控制网络连接?就是win2000下右下角的网络连接标志(一闪一闪的),本来可以手动禁用和手工启动的,不知道能不能编程来控制它的禁用和启用?非常感谢!高分赠送!
---------------------------------------------------------------
/*
还是帖出来吧, 我可是花了三天时间才搞定了.
*/
#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;
}
//---------------------------------------------------------------------------
vc 启用/
禁用
网卡
vc启用/
禁用
网卡
源代码 vc启用/
禁用
网卡
源代码 vc启用/
禁用
网卡
源代码 vc启用/
禁用
网卡
源代码 vc启用/
禁用
网卡
源代码
自动
禁用
网卡
和自动启用
网卡
的方法
用2个VBS+1个批处理。就可以实现FOR XP和2003的自动
禁用
网卡
和自动启用
网卡
的方法
Linux驱动程序之
网卡
先讲框架,在编写一个虚拟
网卡
驱动
启用
禁用
网卡
(delphi)
启用
禁用
网卡
的源程序,网上搜集的,共享喽...
VC编程
禁用
和启用
网卡
在网上找了半天,到处都是同一个例子,而且只能
禁用
和启用PCI插槽类型的
网卡
,不支持集成
网卡
。 由于自己要用到,所以琢磨了半天进行了一点改动,现在试过十几台机器,pci的和集成的
网卡
都可以
禁用
和启用。 放在了一...
通信技术
4,356
社区成员
28,926
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章