소프트웨어를 통해 노트북의 무선 모듈 스위치를 제어하는 방법
제어판에서 무선 네트워크 카드 비활성화를 제어할 수 있습니다.
bool CNetCardStateSet::NetCardStateChange(void * NetCardPoint, bool Enabled)
{
//------------------------------- -------- ---------------
//기능: NetCardStateChange 활성화 및 네트워크 카드 비활성화
//매개변수: NetCardPoint는 PNetCardStruct의 포인터입니다.
//매개변수: 활성화 true = 활성화 false = 비활성화
//- --------- --------------- --------- --------------
PNetCardStruct NetCard = (PNetCardStruct)NetCardPoint;
DWORD DeviceId = NetCard- >Id;
HDEVINFO hDevInfo = 0;
if (INVALID_HANDLE_VALUE == (hDevInfo =
SetupDiGetClassDevs(NULL,NULL,0,DIGCF_PRESENT|DIGCF_ALLCLASSES))) )
{
false를 반환;
}
/*
SetupDiGetClassDevs(
(LPGUID) &GUID_DEVCLASS_NET, // GUID_DEVCLASS_NET은 네트워크 장치만 나열한다는 의미입니다.
NULL,
this->m_hWnd,
DIGCF_PRESENT);
*/
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
DWORD 상태, 문제;
if (!SetupDiEnumDeviceInfo(hDevInfo,DeviceId, &DeviceInfoData)) //
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 (활성화됨)
{
if (!((Status & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == 문제 ))) //네트워크 카드가 활성화된 경우 처리되지 않습니다.
{
NetCard->Disabled = false;
return false;
}
PropChangeParams.StateChange = DICS_ENABLE;
}
else
{
if ((Status & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == 문제))
{
NetCard->Disabled = true;
return false;
p>
}
if (!((Status & DN_DISABLE) && (CM_PROB_HARDWARE_DISABLED != 문제)))
return false;
PropChangeParams. StateChange = DICS_DISABLE;
}
if (!SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData,(SP_CLASSINSTALL_HEADER *)&PropChangeParams, sizeof(PropChangeParams)))
{// 기능: 네트워크 카드를 유효 또는 무효로 설정
return false;
}
if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &DeviceInfoData)) p>
{
false 반환 ;
}
if (CM_Get_DevNode_Status(&Status, &Problem,DeviceInfoData.DevInst,0) == CR_SUCCESS)
{
NetCard -> 비활성화됨 = (상태 & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == 문제);
}
true를 반환합니다.
}
2
3
4
5
6 p>
7
8
9
위 함수 매개변수의 구조
typedef struct NetCardStruct
{
DWORD Id; // 네트워크 카드 장치 번호
CString Name; // 네트워크 카드 이름
bool 비활성화 여부; 현재 비활성화됨
bool Changed; // 변경 여부
} TNetCardStruct;
typedef TNetCardStruct* PNetCardStruct;
[code =C/C++]이것은 네트워크 카드를 활성화 및 비활성화하는 코드입니다.
p>
PIP_ADAPTER_INFO pAdapterInfo=NULL
ULONG len;
if(ERROR_SUCCESS!=GetAdaptersInfo(pAdapterInfo,&len))
{
free(pAdapterInfo);
pAdapterInfo=(IP_ADAPTER_INFO *)malloc(len);
}
if(ERROR_SUCCESS==GetAdaptersInfo(pAdapterInfo ,&len))
{
}
DWORD dwSize=0;
MIB_IFTABLE *mit=NULL;
GetIfTable(NULL, &dwSize, true);
mit= (MIB_IFTABLE*)new BYTE[dwSize];
if(NO_ERROR==GetIfTable(mit, &dwSize, true) )
{
for(int i =0; i<(int)mit->dwNumEntries; i++)
{
mit->table[i].dwAdminStatus=MIB_IF_ADMIN_STATUS_DOWN;
CString str(pAdapterInfo->Description);
CString temp(mit->table[i].bDescr);
if (str==temp)
{
if(NO_ERROR==SetIfEntry(&mit->table[i]))
{
/* ShowMessage("어댑터 중지("+IntToStr (mit->table[i].dwIndex)+") "
+(AnsiString)(char*) mit->table[i].bDescr+" 성공.");*/
printf("어댑터 중지 성공!\n");
}
}
// if(NO_ERROR==SetIfEntry(&mit- >table[i]))
// {
///* ShowMessage( "Stop Adapter("+IntToStr(mit->table[i].dwIndex)+" ) "
// +(AnsiString)(char*)mit->table[i].bDescr+" 성공 .");*/
// printf("어댑터 중지 성공했습니다!\n");
// }
}
for(int i=0; i<(int)mit->dwNumEntries; i++ )
{
mit->table[i].dwAdminStatus=MIB_IF_ADMIN_STATUS_UP;
p>CString str(pAdapterInfo->Description);
CString temp(mit->table[i].bDescr);
if (str==temp)
{
if(NO_ERROR= =SetIfEntry(&mit->table[i]))
{
printf("어댑터 시작이 성공했습니다!\n");
}
}
}
[code]
위 내용 프로그램에 함수를 배치할 수 있습니다.
사실, 위에 게시된 코드는 이전에 컴파일된 네트워크 카드 설정 클래스의 코드 일부인 것이 좋습니다.