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

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

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

示例代码如下:

HRESULT shareNet(INetSharingManager* pNSM, const char* srcName, const char* dstName)
{
INetConnection * pNC = NULL;
INetSharingConfiguration * pNSC = NULL;
IEnumVARIANT * pEV = NULL;
IUnknown * pUnk = NULL;
INetSharingEveryConnectionCollection * pNSECC = NULL; HRESULT hr = pNSM->get_EnumEveryConnection(&pNSECC);
VARIANT v;
VariantInit(&v); if (!pNSECC)
{
wprintf(L"failed to get EveryConnectionCollection!\r\n");
return NULL;
} hr = pNSECC->get__NewEnum(&pUnk);
if (pUnk)
{
hr = pUnk->QueryInterface(__uuidof(IEnumVARIANT), (void**)&pEV);
pUnk->Release();
} wprintf(L"----------------------------------------------------------\n");
while (S_OK == pEV->Next(1, &v, NULL))
{
if (V_VT(&v) == VT_UNKNOWN)
{
V_UNKNOWN(&v)->QueryInterface(__uuidof(INetConnection), (void**)&pNC);
if (pNC)
{
NETCON_PROPERTIES* pNP = NULL;
pNC->GetProperties(&pNP);
setlocale(LC_ALL, "chs"); wprintf(L"pszwName--%s\n", pNP->pszwName);
wprintf(L"pszwDeviceName--%s\n", pNP->pszwDeviceName);
wprintf(L"Status--%d\n", pNP->Status);
wprintf(L"\n"); //continue;
if (pNP->Status != NCS_CONNECTED) continue;
std::string tmpName = CW2A(pNP->pszwName);
//printf("###### |%s| : |%s|\r\n", tmpName.c_str(),(char*)nicName); hr = pNSM->get_INetSharingConfigurationForINetConnection(pNC, &pNSC);
if (!strcmp(tmpName.c_str(), (char*)srcName))
{
printf("**************find nic srcName : %s\r\n", (char*)srcName);
hr = pNSC->DisableSharing();
Sleep(500);
//getchar();
hr = pNSC->EnableSharing(ICSSHARINGTYPE_PUBLIC);
}
pNSC->Release(); hr = pNSM->get_INetSharingConfigurationForINetConnection(pNC, &pNSC);
if (!strcmp(tmpName.c_str(), (char*)dstName))
{
printf("**************find nic dstName : %s\r\n", (char*)dstName);
hr = pNSC->DisableSharing();
Sleep(500);
hr = pNSC->EnableSharing(ICSSHARINGTYPE_PRIVATE);
}
pNSC->Release();
}
}
}
return hr;
}

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

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

使用方法:

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

比如:

ConsoleApplication1.exe WLAN "以太网 4"

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

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

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

通过程序自动设置网卡的“internet共享”选项的更多相关文章

  1. linux udhcpc 后无法自动设置网卡ip

    arm 主板用 udhcpc 获取租赁的空闲的ip后,并没有直接设置在网卡上. 查了一下相关原因,是因为虽然已经获取了ip, 但是并没有通过脚本去设置这个IP. 在 busybox 里面有相关的脚本要 ...

  2. IIS下Asp.Net应用程序多进程设置及Session共享

    背景: 目前项目中在单个进程的应用程序经常会遇到w3c.exe崩溃的情况,于是就设想是否可以通过IIS多进程的方案来避免出现该问题. 于是搜了下“怎么实现多进程的方案”,找到了这篇文章:http:// ...

  3. 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问

    中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...

  4. 【转】WPF: 自动设置Owner的ShowDialog 适用于MVVM

    原文地址:http://www.mgenware.com/blog/?p=339 WPF中的Windows的ShowDialog方法并没有提供设置Owner的参数,开发者需要在ShowDialog前设 ...

  5. 如何将ASP.NET MVC所有参数均自动设置为默认

    今天看到CSDN上有个问题觉得有点意思:"可不可以ASP.NET MVC所有参数均自动设置为默认" public class HomeController : Controller ...

  6. php利用svn hooks将程序自动发布到测试环境

    利用svn hooks将php程序自动发布到测试环境 复制仓库hooks目录下的post-commit.tmpl为post-commit cp post-commit.tmpl post-commit ...

  7. C#实现通过程序自动抓取远程Web网页信息的代码

    http://www.jb51.net/article/9499.htm 通过程序自动的读取其它网站网页显示的信息,类似于爬虫程序.比方说我们有一个系统,要提取BaiDu网站上歌曲搜索排名.分析系统在 ...

  8. 使用批处理文件,自动设置计算机IP地址

    WIN7批处理设置IP地址不成功,显示“The filename, directory name, or volume label syntax is incorrect.”错误, 解决方法:将“本地 ...

  9. 使用mii-tool设置网卡速率

    转载:http://washion2008.blog.163.com/blog/static/144227201001711537158/ 在ubuntu中,mii-tool 是属于net-tools ...

  10. 让.net程序自动运行在管理员权限下

    原文:让.net程序自动运行在管理员权限下 如何让.net程序自动运行在管理员权限下 VS2010 c# 编译的WINFORM程序 在Win7 以管理员身份运行 windows 7和vista提高的系 ...

随机推荐

  1. 完全免费白嫖 GPT-4 的终极方案!

    原文链接:https://icloudnative.io/posts/completely-free-to-use-gpt4/ GPT-4 目前是世界上最强的多模态大模型,能力甩 GPT-3.5 好几 ...

  2. P1439-DP【绿】

    轻敌了啊...题目一共只有几句话但我却忽略了一个重大信息... 总之我显示写出了时空复杂度都是n^2级别的朴素递推算法,这没什么,基本功而已,然后50分 我试了试滚动数组,把空间复杂度降到了n级别,但 ...

  3. spring cloud 通过feign请求设置请求头

    本文为博主原创,转载请注明出处: spring cloud 服务组件之间通过feign 的方式请求,会携带很少的基础类型的消息头参数,比如Content-Type等,但不会携带自定义或指定的请求头参数 ...

  4. 使用Spring Data JPA实现审计功能,记录创建人、创建时间、最后修改时间和最后修改人

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  5. Qt5.9 UI设计(五)——将Tabwidget与treeWidget相互关联

    前言 前面一章介绍了ControlTabWidget ControlTreeWidget maintitlebar 三个子页面同时布局到 mainwindow 的方法,本章介绍如何将ControlTr ...

  6. [转帖]TiKV Control 使用说明

    https://docs.pingcap.com/zh/tidb/stable/tikv-control TiKV Control(以下简称 tikv-ctl)是 TiKV 的命令行工具,用于管理 T ...

  7. [转帖]crash工具分析Kdump下vmcore文件常用命令总结(三)(实例易懂)

    一.简介 本文主要介绍使用crash工具对kdump生成的vmcore文件进行分析,解析常见的crash命令,前面已讲述两章关于Kdump的内容,读者感兴趣可以点击下面的链接: 1.Kdump调试机理 ...

  8. [转帖]Skywalking学习及整合springboot

    目录 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要特性 4. Skywalking架构简介 5. Spring Cloud与Skywalking实 ...

  9. ebpf的简单学习

    ebpf的简单学习-万事开头难 前言 bpf 值得是巴克利包过滤器 他的核心思想是在内核态增加一个可编程的虚拟机. 可以在用户态定义很多规则, 然后直接在内核态进行过滤和使用. 他的效率极高. 因为避 ...

  10. [转帖]发布即巅峰!万字长文:Java性能调优六大工具:MAT内存分析工具

    jianshu.com/p/4ed3dd8b7b83 MAT是MemoryAnalyzerTool的简称,它是一款功能强大的Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况.MAT是 基 ...