Cómo controlar el interruptor del módulo inalámbrico de la computadora portátil a través del software
Puedes controlar la desactivación de la tarjeta de red inalámbrica en el panel de control
bool CNetCardStateSet::NetCardStateChange(void * NetCardPoint, bool Enabled)
{
//------------------------------------------ -------- ----------------------------
//Función: NetCardStateChange Habilitación y deshabilitar la tarjeta de red
//Parámetro: NetCardPoint es el puntero de PNetCardStruct.
//Parámetro: Habilitado verdadero = habilitar falso = deshabilitar
//- --------- ----------------------------------------- --------- --------------
PNetCardStruct NetCard = (PNetCardStruct)NetCardPoint;
DWORD DeviceId = NetCard- >Id;
HDEVINFO hDevInfo = 0;
if (INVALID_HANDLE_VALUE == (hDevInfo =
SetupDiGetClassDevs(NULL,NULL,0,DIGCF_PRESENT|DIGCF_ALLCLASSES)) )
{
devuelve falso;
}
/*
SetupDiGetClassDevs(
(LPGUID) &GUID_DEVCLASS_NET, // GUID_DEVCLASS_NET significa enumerar solo dispositivos de red
NULL,
this->m_hWnd,
DIGCF_PRESENT
);*/
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
Estado de DWORD, problema;
if (!SetupDiEnumDeviceInfo(hDevInfo,DeviceId, &DeviceInfoData)) //
return false;
if (CM_Get_DevNode_Status(&Status, &Problem,
DeviceInfoData.DevInst,0) != CR_SUCCESS) //Leer el estado de la tarjeta de red
devuelve falso;
SP_PROPCHANGE_PARAMS PropChangeParams = {sizeof(SP_CLASSINSTALL_HEADER)};
PropChangeParams.ClassInstallHeader.InstallFunc
tion = DIF_PROPERTYCHANGE;
PropChangeParams.Scope = DICS_FLAG_GLOBAL;
if (Habilitado)
{
if (!((Estado & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problema))) //Si la tarjeta de red está habilitada, no será procesada
{
NetCard->Disabled = false;
devuelve falso;
}
PropChangeParams.StateChange = DICS_ENABLE;
}
más
{
if ((Estado & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problema))
{
NetCard->Disabled = true;
devuelve falso;
}
if (!((Estado & DN_DISABLEABLE) && (CM_PROB_HARDWARE_DISABLED != Problema)))
devuelve falso;
PropChangeParams.StateChange = DICS_DISABLE;
}
if (!SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData,(SP_CLASSINSTALL_HEADER *)&PropChangeParams, sizeof(PropChangeParams))) p>
{//Función: configura la tarjeta de red para que sea válida o no válida
return false;
}
if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE , hDevInfo, &DeviceInfoData))
{
return false;
}
if (CM_Get_DevNode_Status(&Status, &Problem,DeviceInfoData.DevInst ,0) == CR_SUCCESS )
{
NetCard->Disabled = (Estado & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problema);
} p>
devuelve verdadero;
}
2
3
4
5
6
7
8
9
La estructura de los parámetros de función anteriores Cuerpo
typedef struct NetCardStruct
{
DWORD Id; // Número de dispositivo de tarjeta de red
Nombre de CString // Nombre de la tarjeta de red; p>
bool Disabled; // Si está actualmente deshabilitado
bool Changed // Si ha sido cambiado
} TNetCardStruct;
typedef TNetCardStruct* PNetCardStruct;
[code=C/C++]Este es un fragmento de código para habilitar y deshabilitar la tarjeta de red, puede consultar
PIP_ADAPTER_INFO pAdapterInfo=NULL;
ULONG len;
if(ERROR_SUCCESS!=GetAdaptersInfo(pAdapterInfo,&len))
{
gratis(pAdapterInfo);
pAdapterInfo=(IP_ADAPTER_INFO * )malloc(len);
}
if(ERROR_SUCCESS==GetAdaptersInfo(pAdapterInfo,&len))
{
}
DWORD dwSize=0;
MIB_IFTABLE *mit=NULL;
GetIfTable(NULL, &dwSize, verdadero) ;
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->Descripción);
CString temp(mit->table[i].bDescr);
if (str= =temp)
{
if(NO_ERROR==SetIfEntry(&mit->table[i]))
{
/ * ShowMessage("Stop Adapter("+IntToStr( mit->table[i].dwIndex)+") "
+(AnsiString)(char*)mit->table[i].bDescr+" exitoso.");*/
printf("¡Detener el adaptador exitosamente!\n");
}
}
/ / if(NO_ERROR==SetIfEntry(&mit-> tabla[i]))
// {
>
///* ShowMessage("Stop Adapter("+IntToStr(mit->table[i].dwIndex)+") "
// +(AnsiString)(char*)mit ->table[i].bDescr+" éxito.");*/
// printf("¡Detener el adaptador correctamente!\n");
// }
}
for(int i=0; i<(int)mit->dwNumEntries; i++)
{
mit->tabla [i].dwAdminStatus=MIB_IF_ADMIN_STATUS_UP;
CString str(pAdapterInfo->Descripción);
CString temp(mit->table[i].bDescr);
if (str==temp)
{
if(NO_ERROR==SetIfEntry(&mit->table[i]))
{ p>
printf("¡Iniciar el adaptador con éxito!\n");
}
}
}
[código ]
Puedes colocar la función anterior en tu programa
De hecho, el código publicado arriba es preferiblemente parte del código en una clase de configuración de tarjeta de red que se compiló antes