我从网上摘了这个代码,可以正常编译,但无奈不知怎么调用它来断网和联网,请高手指点一下。代码如下
#include <tchar.h>
#include <windows.h>
#include <setupapi.h> #pragma comment (lib, "setupapi") #define UnknownDevice TEXT( " <Unknown Device> ") HDEVINFO hDevInfo = 0;
BOOL StateChange(DWORD NewState, DWORD SelectedItem,HDEVINFO hDevInfo)
{
SP_PROPCHANGE_PARAMS PropChangeParams = {sizeof(SP_CLASSINSTALL_HEADER)};
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
HCURSOR hCursor; //
// This may take a while :^(
//
hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); //
// Get a handle to the Selected Item.
//
if (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))
{
printf( "EnumDeviceInfo ");
return FALSE;
} //
// Set the PropChangeParams structure.
//
PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
PropChangeParams.Scope = DICS_FLAG_GLOBAL;
PropChangeParams.StateChange = NewState; if (!SetupDiSetClassInstallParams(hDevInfo,
&DeviceInfoData,
(SP_CLASSINSTALL_HEADER *)&PropChangeParams,
sizeof(PropChangeParams)))
{
printf( "SetClassInstallParams ");
SetCursor(hCursor);
return FALSE;
} //
// Call the ClassInstaller and perform the change.
//
if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,
hDevInfo,
&DeviceInfoData))
{
printf( "SetClassInstallParams ");
SetCursor(hCursor);
return TRUE;
} SetCursor(hCursor);
return TRUE;
}
BOOL IsClassNet( GUID * ClassGuid )
{
#define MAX_NUM 50 HKEY hKeyClass;
LONG lRet;
char ClassType[MAX_NUM];
char NetClass[MAX_NUM] = "Net ";
DWORD dwLength = MAX_NUM,dwType = REG_SZ;
if (hKeyClass = SetupDiOpenClassRegKey(ClassGuid,KEY_READ))
{
lRet = RegQueryValueEx(hKeyClass,
TEXT( "Class "),
NULL, &dwType, LPBYTE(ClassType), &dwLength);
RegCloseKey(hKeyClass); if (lRet != ERROR_SUCCESS)
return FALSE; if (!strcmp(ClassType,NetClass))
return TRUE;
} return FALSE;
} int main(int argc, char* argv[])
{
if (INVALID_HANDLE_VALUE == (hDevInfo =
SetupDiGetClassDevs(NULL,NULL,0,
DIGCF_PRESENT|DIGCF_ALLCLASSES)))
{
printf( "GetClassDevs ");
return 0;
} DWORD i, Status, Problem;
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
HKEY hKeyClass;
char DeviceName[200];
for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++)
{
if (IsClassNet(&DeviceInfoData.ClassGuid))
{
printf( " the class 's index is %d\n ",i);
//
//DICS_DISABLE--> 禁用网络
//DICS_ENABLE---> 恢复网络
//
if (StateChange(DICS_ENABLE,i,hDevInfo))
printf( "NetWork stopped "); }
} return 0;
}
#include <tchar.h>
#include <windows.h>
#include <setupapi.h> #pragma comment (lib, "setupapi") #define UnknownDevice TEXT( " <Unknown Device> ") HDEVINFO hDevInfo = 0;
BOOL StateChange(DWORD NewState, DWORD SelectedItem,HDEVINFO hDevInfo)
{
SP_PROPCHANGE_PARAMS PropChangeParams = {sizeof(SP_CLASSINSTALL_HEADER)};
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
HCURSOR hCursor; //
// This may take a while :^(
//
hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); //
// Get a handle to the Selected Item.
//
if (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))
{
printf( "EnumDeviceInfo ");
return FALSE;
} //
// Set the PropChangeParams structure.
//
PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
PropChangeParams.Scope = DICS_FLAG_GLOBAL;
PropChangeParams.StateChange = NewState; if (!SetupDiSetClassInstallParams(hDevInfo,
&DeviceInfoData,
(SP_CLASSINSTALL_HEADER *)&PropChangeParams,
sizeof(PropChangeParams)))
{
printf( "SetClassInstallParams ");
SetCursor(hCursor);
return FALSE;
} //
// Call the ClassInstaller and perform the change.
//
if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,
hDevInfo,
&DeviceInfoData))
{
printf( "SetClassInstallParams ");
SetCursor(hCursor);
return TRUE;
} SetCursor(hCursor);
return TRUE;
}
BOOL IsClassNet( GUID * ClassGuid )
{
#define MAX_NUM 50 HKEY hKeyClass;
LONG lRet;
char ClassType[MAX_NUM];
char NetClass[MAX_NUM] = "Net ";
DWORD dwLength = MAX_NUM,dwType = REG_SZ;
if (hKeyClass = SetupDiOpenClassRegKey(ClassGuid,KEY_READ))
{
lRet = RegQueryValueEx(hKeyClass,
TEXT( "Class "),
NULL, &dwType, LPBYTE(ClassType), &dwLength);
RegCloseKey(hKeyClass); if (lRet != ERROR_SUCCESS)
return FALSE; if (!strcmp(ClassType,NetClass))
return TRUE;
} return FALSE;
} int main(int argc, char* argv[])
{
if (INVALID_HANDLE_VALUE == (hDevInfo =
SetupDiGetClassDevs(NULL,NULL,0,
DIGCF_PRESENT|DIGCF_ALLCLASSES)))
{
printf( "GetClassDevs ");
return 0;
} DWORD i, Status, Problem;
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
HKEY hKeyClass;
char DeviceName[200];
for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++)
{
if (IsClassNet(&DeviceInfoData.ClassGuid))
{
printf( " the class 's index is %d\n ",i);
//
//DICS_DISABLE--> 禁用网络
//DICS_ENABLE---> 恢复网络
//
if (StateChange(DICS_ENABLE,i,hDevInfo))
printf( "NetWork stopped "); }
} return 0;
}
//DICS_ENABLE---> 恢复网络
//
if (StateChange(DICS_ENABLE,i,hDevInfo))
printf( "NetWork stopped "); 这里写的不是很清楚吗?
printf( "NetWork stopped ");
里面的DICS_ENABLE修改成DICS_DISABLE,无效,什么都不会发生,修改回来,还是无效,什么输出都没,而且还不会断网····请大牛们试一试再回帖啊···小弟在这里谢谢了
D:\Program Files\Microsoft Visual Studio\MyProjects\12\12.cpp(8) : error C2146: syntax error : missing ';' before identifier 'hDevInfo'
D:\Program Files\Microsoft Visual Studio\MyProjects\12\12.cpp(8) : error C2501: 'HDEVINFO' : missing storage-class or type specifiers
D:\Program Files\Microsoft Visual Studio\MyProjects\12\12.cpp(8) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.