gpt4 book ai didi

c++ - 如何使用 C++ 更改 Windows ncpa.cpl 中显示的网络名称?

转载 作者:行者123 更新时间:2023-11-30 17:12:50 25 4
gpt4 key购买 nike

Windows 的“控制面板\网络和 Internet\网络连接”对话框(也可通过运行ncpa.cpl)用于显示网络。用户可以通过右键单击并选择“重命名”来重命名网络的名称。这个名称与适配器名称不同,例如,我的以太网卡的网络名称“以太网”,但是>适配器名称称为“Qualcomm Atheros AR8171/8175 PCI-E 千兆位以太网 Controller (NDIS 6.30)”。我知道我可以使用 NetCfg API 更改后一个,但我不知道如何更改前一个,即“以太网”

我知道 netsh 命令似乎可以完成这项工作。但我想使用 C++ 实现此重命名。有办法吗?

<小时/>

解决方案:

我很高兴使用 NetShareManager API 解决了问题! NETCON_PROPERTIES结构体保存了设备的GUID,用于搜索设备,INetConnection::Rename可用于重命名网络连接名称!

代码如下:

BOOL DoTheWork(INetSharingManager *pNSM, wchar_t strDeviceName[])
{ // add a port mapping to every firewalled or shared connection
BOOL bFound = FALSE;
INetSharingEveryConnectionCollection * pNSECC = NULL;
HRESULT hr = pNSM->get_EnumEveryConnection (&pNSECC);
if (!pNSECC)
wprintf (L"failed to get EveryConnectionCollection!\r\n");
else {

// enumerate connections
IEnumVARIANT * pEV = NULL;
IUnknown * pUnk = NULL;
hr = pNSECC->get__NewEnum (&pUnk);
if (pUnk) {
hr = pUnk->QueryInterface (__uuidof(IEnumVARIANT),
(void**)&pEV);
pUnk->Release();
}
if (pEV) {
VARIANT v;
VariantInit (&v);

while ((S_OK == pEV->Next (1, &v, NULL)) && (bFound == FALSE)) {
if (V_VT (&v) == VT_UNKNOWN) {
INetConnection * pNC = NULL;
V_UNKNOWN (&v)->QueryInterface (__uuidof(INetConnection),
(void**)&pNC);
if (pNC) {
NETCON_PROPERTIES *pNETCON_PROPERTIES;
pNC->GetProperties(&pNETCON_PROPERTIES);

wchar_t currentGUID[BUF_SIZE];
GUID guid = pNETCON_PROPERTIES->guidId;
wsprintf(currentGUID, L"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
guid.Data1, guid.Data2, guid.Data3,
guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);

if (wcscmp(currentGUID, strDeviceName) == 0)
{
pNC->Rename(NPCAP_LOOPBACK_INTERFACE_NAME);
bFound = TRUE;
}

pNC->Release();
}
}
VariantClear(&v);
}
pEV->Release();
}
pNSECC->Release();
}

return bFound;
}

最佳答案

粗略地看一下代码

netsh interface set interface name "oldname" newname="newname"

它看起来正在使用 INetworkConnection::Rename 。为了获得您想要的连接,我相信您必须使用 INetSharingManager枚举所有可用的连接。然后,您必须遍历它们以找到所需的名称,然后调用重命名函数。

话虽这么说,正如 @Alexander Balabin 所说,NLM API 可能会更容易,但我不确定它是否能满足您的要求。我可以告诉你 netsh 是做什么的。

关于c++ - 如何使用 C++ 更改 Windows ncpa.cpl 中显示的网络名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31249684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com