CString GetMacAddress()
/
通过WMI取第一块活动网卡地址,事先需要调用过CoInitialize()初始化COM
/
{
HRESULT hRes;
hRes = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
if (FAILED(hRes))
return _T("");
IWbemLocator pLoc = NULL;
hRes = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID)&pLoc);
if (FAILED(hRes))
return _T("");
IWbemServices pSvc = NULL;
hRes = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), NULL, NULL, 0,
NULL, 0, 0, &pSvc);
if (FAILED(hRes))
{
pLoc->Release();
return _T("");
}
hRes = CoSetProxyBlanket(pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE,
NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_DEFAULT);
if (FAILED(hRes))
{
pSvc->Release();
pLoc->Release();
return _T("");
}
IEnumWbemClassObject pEnumerator = NULL;
hRes = pSvc->ExecQuery(_bstr_t(L"WQL"),
_bstr_t(L"SELECT FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL, &pEnumerator);
if (FAILED(hRes))
{
pSvc->Release();
pLoc->Release();
return _T("");
}
CString szMacAddress = _T("");
while (true)
{
IWbemClassObject pclsObj = NULL;
ULONG uReturn = 0;
hRes = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if (FAILED(hRes) || !uReturn)
break;
VARIANT vtProp;
VariantInit(&vtProp);
if (SUCCEEDED(pclsObj->Get(L"MACAddress", 0, &vtProp, 0, 0)))
{
if (V_VT(&vtProp) == VT_BSTR)
{
szMacAddress = vtPropbstrVal;
VariantClear(&vtProp);
pclsObj->Release();
break;
}
VariantClear(&vtProp);
}
pclsObj->Release();
}
pEnumerator->Release();
pSvc->Release();
pLoc->Release();
return szMacAddress;
}
------解决方案--------------------奥,那个DLL大概在02年左右整理的好像,时间太久了,应该是不支持vsita的,楼主看看这段代码是否有用?我是拷贝来的:/ //函数名称:GetDriverInfomation //函数功能:得到驱动器的信息 //参数1:bAlpha - BYTE型,驱动器的代号A-Z(a-z) //参数2:iGTI_TYPE - int,将要获取的驱动器信息类型 // GDI_VOLUMENAME 得到驱动器名字 // GDI_VOLUMESERIALNUMBER 得到驱动器序列号 // GDI_VOLUMEFILESYSTEM 得到驱动器文件系统 // GDI_VOLUMETYPE 得到驱动器类型 // GDI_VOLUMESIZE 得到驱动器总大小 // GDI_VOLUMEFREESIZE 得到驱动器剩余大小 //返回值:CString型,所要得到的驱动器信息的字符串表达 //例子:得到C盘的名字GetDriverInfomation('C',GDI_VOLUMENAME) / #define GDI_VOLUMENAME 0 #define GDI_VOLUMESERIALNUMBER 1 #define GDI_VOLUMEFILESYSTEM 2 #define GDI_VOLUMETYPE 3 #define GDI_VOLUMESIZE 4 #define GDI_VOLUMEFREESIZE 5 CString GetDriverInfomation(BYTE bAlpha,int iGTI_TYPE) { CString strResult = _T("");
@echo Off & setlocal Enabledelayedexpansion & mode 65,15
>>$ ipconfig /all
>>$1 findstr /i "IPv4" "$" & move $1 $ & cls
>>$1 (for /f "tokens=2 delims=:" %%a in ($) do (
set/a str_step+=1 & set str=
set "str=%%a" & set str=!str:^(=! & set str=!str: =!
set str=!str:首选=! & set str=!str:^)=!
echo !str!))
move $1 $ & cls & set str_step= & echo(
for /f "delims=" %%a in ($) do (
set/a str_step+=1
echo !str_step!%%a)
echo & set/p ips= 请选择 IP :
for /f "delims=" %%a in ($) do set/a step+=1
if !ips!==0 (exit) else if !ips! gtr !step! exit
set str_step=
for /f "delims=" %%a in ($) do (
set/a str_step+=1
if !str_step!==!ips! set "ipstr=%%a")
echo 您的IP则是: !ipstr!
pause>nul
:: 中国批处理脚本联盟
:: 已经将您的 IP 赋值给了 ipstr 这个变量, 你可以加以应用!
是否动态获取IP(主要)?不知道呢
C调用内核API我还真不知道
可以用SHELL
ifconfig eth0|grep Mask|awk 'BEGIN{RS=":"}{print $1}' |grep -v 'inet'
列出分别是
IP
Bcast
Mask
自己看着办吧
以上就是关于VC怎么获取硬件ID,CPU,硬件,网卡等全部的内容,包括:VC怎么获取硬件ID,CPU,硬件,网卡等、批处理-获取第二张网卡的IP地址最后一位、linux c语言 获得网卡状态等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)