通过程序自动设置网卡的“internet共享”选项
操作系统 : 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共享”选项的更多相关文章
- linux udhcpc 后无法自动设置网卡ip
arm 主板用 udhcpc 获取租赁的空闲的ip后,并没有直接设置在网卡上. 查了一下相关原因,是因为虽然已经获取了ip, 但是并没有通过脚本去设置这个IP. 在 busybox 里面有相关的脚本要 ...
- IIS下Asp.Net应用程序多进程设置及Session共享
背景: 目前项目中在单个进程的应用程序经常会遇到w3c.exe崩溃的情况,于是就设想是否可以通过IIS多进程的方案来避免出现该问题. 于是搜了下“怎么实现多进程的方案”,找到了这篇文章:http:// ...
- 中小研发团队架构实践之生产环境诊断工具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如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- 【转】WPF: 自动设置Owner的ShowDialog 适用于MVVM
原文地址:http://www.mgenware.com/blog/?p=339 WPF中的Windows的ShowDialog方法并没有提供设置Owner的参数,开发者需要在ShowDialog前设 ...
- 如何将ASP.NET MVC所有参数均自动设置为默认
今天看到CSDN上有个问题觉得有点意思:"可不可以ASP.NET MVC所有参数均自动设置为默认" public class HomeController : Controller ...
- php利用svn hooks将程序自动发布到测试环境
利用svn hooks将php程序自动发布到测试环境 复制仓库hooks目录下的post-commit.tmpl为post-commit cp post-commit.tmpl post-commit ...
- C#实现通过程序自动抓取远程Web网页信息的代码
http://www.jb51.net/article/9499.htm 通过程序自动的读取其它网站网页显示的信息,类似于爬虫程序.比方说我们有一个系统,要提取BaiDu网站上歌曲搜索排名.分析系统在 ...
- 使用批处理文件,自动设置计算机IP地址
WIN7批处理设置IP地址不成功,显示“The filename, directory name, or volume label syntax is incorrect.”错误, 解决方法:将“本地 ...
- 使用mii-tool设置网卡速率
转载:http://washion2008.blog.163.com/blog/static/144227201001711537158/ 在ubuntu中,mii-tool 是属于net-tools ...
- 让.net程序自动运行在管理员权限下
原文:让.net程序自动运行在管理员权限下 如何让.net程序自动运行在管理员权限下 VS2010 c# 编译的WINFORM程序 在Win7 以管理员身份运行 windows 7和vista提高的系 ...
随机推荐
- P2241
这么多年不写代码,竟然忘了longlong这茬,我半天没想明白错在哪里,过了好久才反应过来.浪费不少时间,真的得记住longlong 啊.... Code #include <iostream& ...
- C++ 覆盖写文件
写文件有三种模式: 截断写,文件打开之后立即清空原有内容 附加写,文件打开之后不清空原有内容,每次只能在文件最后写入 覆盖写,文件打开之后不清空原有内容,可以在文件任意位置写入 例如:文件原有内容为 ...
- 【Linux】字符驱动之sysfs接口实现
[来源]https://blog.csdn.net/qq_20553613/article/details/104556269
- [转帖]JVM性能调优工具2之jcmd详解(覆盖全网最全的jcmd命令与说明文档)
上篇文章里<JVM常用性能调优工具详解1>我们已经探究了jps.jstat等监控工具,以及jinfo.jmap.jstack.jhat等故障排查工具,这里我单独拿出一篇文章,特别介绍jcm ...
- [转帖]shell 把以空格分隔的变量 分割后的每个字段赋值给变量
比如我有一个变量 "123 456 789",要求以空格为分隔符把这个变量分隔,并把分隔后的字段分别赋值给变量,即a=123:b=456:c=789 共有3中方法: 法一:先定义一 ...
- [转帖]elasticsearch8.0以上版本修改内置用户密码
https://www.cnblogs.com/zhang-ding-1314/p/16199682.html 修改密码需要在es启动,并cd到es的bin目录下执行: 1.重置密码并在控制台显示新密 ...
- [转帖]重置 VCSA 6.7 root密码和SSO密码
问题描述 1.用root用户登录 VMware vCenter Server Appliance虚拟机失败,无法登录 2.vCenter Server Appliance 6.7 U1的root帐户错 ...
- [转帖]【Redis】Redis中使用Lua脚本
Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. Lua具体语法参考:https://www.runoob. ...
- [转帖]Datadog 能成为最大的云监控厂商吗
https://xie.infoq.cn/article/901cfd6b284e3e103ac70aeb3 作者:睿象云 2021-03-25 本文字数:2256 字 阅读完需:约 7 分钟 D ...
- [转帖]linux 查看CPU 内存的信息
https://bbs.huaweicloud.com/blogs/302929 [摘要] ECS信息规格:2vCPUs | 4GiB | kc1.large.2镜像:openEuler 20.0 ...