经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
通过程序自动设置网卡的“internet共享”选项
来源:cnblogs  作者:Mike_Zhang  时间:2021/1/25 11:23:51  对本文有异议

操作系统 : Windows 10_x64 [版本 10.0.19042.685]

Windows下可以通过网卡共享进行上网,但是需要在网卡的属性里面进行设置,需要在视窗界面进行操作,不能实现自动化。

 

 

查了下资料,可以通过INetSharingManager来实现,原理很简单: 模拟手工的动作自动化操作。

示例代码如下:

  1. HRESULT shareNet(INetSharingManager* pNSM, const char* srcName, const char* dstName)
  2. {
  3. INetConnection * pNC = NULL;
  4. INetSharingConfiguration * pNSC = NULL;
  5. IEnumVARIANT * pEV = NULL;
  6. IUnknown * pUnk = NULL;
  7. INetSharingEveryConnectionCollection * pNSECC = NULL;
  8. HRESULT hr = pNSM->get_EnumEveryConnection(&pNSECC);
  9. VARIANT v;
  10. VariantInit(&v);
  11. if (!pNSECC)
  12. {
  13. wprintf(L"failed to get EveryConnectionCollection!\r\n");
  14. return NULL;
  15. }
  16. hr = pNSECC->get__NewEnum(&pUnk);
  17. if (pUnk)
  18. {
  19. hr = pUnk->QueryInterface(__uuidof(IEnumVARIANT), (void**)&pEV);
  20. pUnk->Release();
  21. }
  22. wprintf(L"----------------------------------------------------------\n");
  23. while (S_OK == pEV->Next(1, &v, NULL))
  24. {
  25. if (V_VT(&v) == VT_UNKNOWN)
  26. {
  27. V_UNKNOWN(&v)->QueryInterface(__uuidof(INetConnection), (void**)&pNC);
  28. if (pNC)
  29. {
  30. NETCON_PROPERTIES* pNP = NULL;
  31. pNC->GetProperties(&pNP);
  32. setlocale(LC_ALL, "chs");
  33. wprintf(L"pszwName--%s\n", pNP->pszwName);
  34. wprintf(L"pszwDeviceName--%s\n", pNP->pszwDeviceName);
  35. wprintf(L"Status--%d\n", pNP->Status);
  36. wprintf(L"\n");
  37. //continue;
  38. if (pNP->Status != NCS_CONNECTED) continue;
  39. std::string tmpName = CW2A(pNP->pszwName);
  40. //printf("###### |%s| : |%s|\r\n", tmpName.c_str(),(char*)nicName);
  41. hr = pNSM->get_INetSharingConfigurationForINetConnection(pNC, &pNSC);
  42. if (!strcmp(tmpName.c_str(), (char*)srcName))
  43. {
  44. printf("**************find nic srcName : %s\r\n", (char*)srcName);
  45. hr = pNSC->DisableSharing();
  46. Sleep(500);
  47. //getchar();
  48. hr = pNSC->EnableSharing(ICSSHARINGTYPE_PUBLIC);
  49. }
  50. pNSC->Release();
  51. hr = pNSM->get_INetSharingConfigurationForINetConnection(pNC, &pNSC);
  52. if (!strcmp(tmpName.c_str(), (char*)dstName))
  53. {
  54. printf("**************find nic dstName : %s\r\n", (char*)dstName);
  55. hr = pNSC->DisableSharing();
  56. Sleep(500);
  57. hr = pNSC->EnableSharing(ICSSHARINGTYPE_PRIVATE);
  58. }
  59. pNSC->Release();
  60. }
  61. }
  62. }
  63. return hr;
  64. }

添加相关代码并使用VS2015编译:

 

 需要管理员权限运行,Release目录有可执行程序

 

使用方法:

  1. ConsoleApplication1.exe 能上网的网卡名称 需要上网的网卡名称

比如:

  1. ConsoleApplication1.exe WLAN "以太网 4"

当然也可以使用批处理文件,但需要注意下文件编码使用GBK 编码。

 

 本文涉代码及预编译程序下载地址:https://pan.baidu.com/s/1sRKwYDP_gFMegeK5rTP3rg

可关注微信公众号(聊聊博文)后回复 2021012301 获取提取码。

原文链接:http://www.cnblogs.com/MikeZhang/p/windowsICS20210123.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号