一、注册表更改SpeedDuplex

1.注册表SpeedDuplex定义

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0001\Ndi\params\*SpeedDuplex\enum]
"0"="自动侦测"
"1"="10 Mbps 半双工"half-duplex
"2"="10 Mbps 全双工" full duplex
"3"="100 Mbps 半双工"half-duplex
"4"="100 Mbps 全双工"full duplex
"6"="1.0 Gbps 全双工"full duplex

2.改动位置

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0001]

3.实现代码

HKEY hKEY;//定义有关的hKEY,在查询结束时要关闭//打开与路径data_Set相关的hKEYLPCTSTR data_Set = _T("SYSTEM\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-08002be10318}\\0001");//if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, NULL, 0, KEY_WRITE, NULL, &hKEY, 0))if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_ALL_ACCESS, &hKEY)){CString itemvalue = _T("1");//定义字符串变量DWORD size = itemvalue.GetLength();//获取字符串长度//设置项值//if (ERROR_SUCCESS == RegSetValueEx(hKEY, data_Set, 0, REG_SZ, (unsigned char*)itemvalue.GetBuffer(0), size))if (ERROR_SUCCESS == RegSetValueEx(hKEY, _T("*SpeedDuplex"), 0, REG_SZ, (unsigned char*)itemvalue.GetBuffer(0), size)){ //MessageBox( TEXT("10 Mbps  half-duplex"), NULL, MB_OK);DisableLAN();EnableLAN();}else{//printf("Error: unable to query information about the registry");//return 1;ErrorExit(TEXT("RegSetValueEx"));exit(1);}}else{//printf("Error: unable to query information about the registry");//return 1;ErrorExit(TEXT("RegOpenKeyEx"));exit(1);}//RegFlushKey(hKEY);RegCloseKey(hKEY);//关闭键句柄
//当RegSetValueEx函数的返回值为ERROR_SUCCESS时,表示设置成功

4.重启网卡

// lan2.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#include <stdio.h>
#include <windows.h>
#include <Setupapi.h>
#include <objbase.h>
#pragma comment(lib, "Setupapi.lib")
#include "Restart.h"
#include "ErrorExit.h"
int DisableLAN(void)
{HDEVINFO hDevInfo = INVALID_HANDLE_VALUE;hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_PRESENT | DIGCF_ALLCLASSES);if (INVALID_HANDLE_VALUE == hDevInfo)return GetLastError();//EnumDevices(hDevInfo);SP_DEVINFO_DATA DeviceInfoData = { sizeof(SP_DEVINFO_DATA) };LPOLESTR guid;TCHAR devName[128];TCHAR instanceId[128];for (int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++){StringFromCLSID(DeviceInfoData.ClassGuid, &guid);SetupDiClassNameFromGuid(&DeviceInfoData.ClassGuid, devName, 128, NULL);//   if(!SetupDiClassNameFromGuid(&DeviceInfoData.ClassGuid, devName, 128, NULL))//ErrorExit(TEXT("SetupDiClassNameFromGuid"));//错误分析//MessageBox(NULL,(LPCWSTR)GetLastError(),NULL,MB_OK);//printf("%s\n", devName);if (!strcmp(devName, _T("Net")))//if (!wcscmp(devName, _T("Net"))){SetupDiGetDeviceInstanceId(hDevInfo, &DeviceInfoData, instanceId, 128, NULL);//if(!SetupDiGetDeviceInstanceId(hDevInfo, &DeviceInfoData, instanceId, 128, NULL))//   ErrorExit(TEXT("SetupDiClassNameFromGuid"));//错误分析//printf("instanceId1:%s\n", instanceId);if (!strncmp(instanceId, _T("PCI"), 3)){//wprintf(L"guid:%s\n", guid);// printf("devName:%s\n", devName);//    printf("instanceId2:%s\n", instanceId);SP_PROPCHANGE_PARAMS params = { sizeof(SP_CLASSINSTALL_HEADER) };params.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;params.Scope = DICS_FLAG_CONFIGSPECIFIC;params.StateChange = DICS_DISABLE;//params.StateChange = DICS_ENABLE;params.HwProfile = 0;SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER*)¶ms, sizeof(SP_PROPCHANGE_PARAMS));//if(!SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER*)¶ms, sizeof(SP_PROPCHANGE_PARAMS)))//   ErrorExit(TEXT("SetupDiClassNameFromGuid"));//错误分析SetupDiChangeState(hDevInfo, &DeviceInfoData);}}CoTaskMemFree(guid);}SetupDiDestroyDeviceInfoList(hDevInfo);return 0;
}
int EnableLAN(void)
{HDEVINFO hDevInfo = INVALID_HANDLE_VALUE;hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_PRESENT | DIGCF_ALLCLASSES);if (INVALID_HANDLE_VALUE == hDevInfo)return GetLastError();//EnumDevices(hDevInfo);SP_DEVINFO_DATA DeviceInfoData = { sizeof(SP_DEVINFO_DATA) };LPOLESTR guid;TCHAR devName[128];TCHAR instanceId[128];for (int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++){StringFromCLSID(DeviceInfoData.ClassGuid, &guid);SetupDiClassNameFromGuid(&DeviceInfoData.ClassGuid, devName, 128, NULL);//printf("%s\n", devName);if (!strcmp(devName, _T("Net"))){SetupDiGetDeviceInstanceId(hDevInfo, &DeviceInfoData, instanceId, 128, NULL);//printf("instanceId1:%s\n", instanceId);if (!strncmp(instanceId, _T("PCI"), 3)){//wprintf(L"guid:%s\n", guid);//  printf("devName:%s\n", devName);//    printf("instanceId2:%s\n", instanceId);SP_PROPCHANGE_PARAMS params = { sizeof(SP_CLASSINSTALL_HEADER) };params.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;params.Scope = DICS_FLAG_CONFIGSPECIFIC;// params.StateChange = DICS_DISABLE;params.StateChange = DICS_ENABLE;params.HwProfile = 0;SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER*)¶ms, sizeof(SP_PROPCHANGE_PARAMS));SetupDiChangeState(hDevInfo, &DeviceInfoData);}}CoTaskMemFree(guid);}SetupDiDestroyDeviceInfoList(hDevInfo);return 0;
}

二、网速监控

控制台案例可参考下面基于C++的输出当前网速的小代码-带效果图,我也是对别人的代码移植,采用定时器+消息机制+线程,

unsigned int __stdcall ThreadProc_Speed(LPVOID lpParameter)
{CspeedDuplexDlg *pDlg= (CspeedDuplexDlg *)lpParameter;PMIB_IFTABLE    m_pTable = NULL;DWORD   m_dwAdapters = 0;ULONG     uRetCode = GetIfTable(m_pTable, &m_dwAdapters, TRUE);if (uRetCode == ERROR_NOT_SUPPORTED){//return (-1);exit(-1);}if (uRetCode == ERROR_INSUFFICIENT_BUFFER){m_pTable = (PMIB_IFTABLE)new BYTE[65535];                                       //假设端口数不超过65535个}DWORD  dwLastIn = 0;                                                                          //上一秒钟的接收字节数DWORD   dwLastOut = 0;                                                                         //上一秒钟的发送字节数DWORD   dwBandIn = 0;                                                                          //下载速度DWORD dwBandOut = 0;                                                                         //上传速度while (1){GetIfTable(m_pTable, &m_dwAdapters, TRUE);DWORD dwInOctets = 0;DWORD   dwOutOctets = 0;//将所有端口的流量进行统计for (UINT i = 0; i < m_pTable->dwNumEntries; i++){MIB_IFROW Row = m_pTable->table[i];dwInOctets += Row.dwInOctets;dwOutOctets += Row.dwOutOctets;}dwBandIn = dwInOctets - dwLastIn;    //下载速度dwBandOut = dwOutOctets - dwLastOut; //上床速速if (dwLastIn <= 0){dwBandIn = 0;}else{dwBandIn = dwBandIn / 1024;   //b转换成kb}if (dwLastOut <= 0){dwBandOut = 0;}else{dwBandOut = dwBandOut / 1024;    //b转换成kb}dwLastIn = dwInOctets;dwLastOut = dwOutOctets;printf("收到字节: %u bytes\n", dwLastIn);printf("发送字节: %u bytes\n", dwLastOut);printf("下行速度: %u KB\n", dwBandIn);printf("上行速度: %u KB\n", dwBandOut);printf("--------------------------\n");//CStatic *pStatic = (CStatic *)GetDlgItem(IDC_STATIC1);//   CString box;//  box.Format(_T("下行速度:%u KB"), dwBandIn);//  m_static1.SetWindowText(box);// SendMessage(hView,MYWM_CHANGE_EDIT, wParam,lParam);PostMessage(pDlg->m_hWnd, WM_MY_MESSAGE, dwBandIn, dwBandOut);Sleep(1000);//休眠一秒钟}delete[] m_pTable;return 0;
}

源码:http://download.csdn.net/detail/greless/9839755(VS2015 ANSI编码 管理员模式)

参考:

MFC网速及流量监控程序的实现(一)

基于C++的输出当前网速的小代码-带效果图

使用GetIfTable获取MIB_IFTABLE和MIB_IFROW获取网络接口信息

GetIfTable function

MIB_IFTABLE

MIB_IFROW

C++实现改变网速*SpeedDuplex和网速监控相关推荐

  1. 电脑测速软件_网速慢,怎么办,教你测速,教你解决方案

    网速慢.网页慢.视频卡.游戏卡,如何判断自己的宽带速率是否有问题,本期我们来讨论下,如何正确测试网速,信道干扰.2.4G与5G信号.IPTV测速. 一.电脑测速 受到无线环境影响,无线性能瓶颈等多方面 ...

  2. 听歌也能倍速了!网易云音乐PM怎么想的?

    网易云音乐近期上线了个备受争议功能--倍速播放. 音乐播放主页,点击更多就能找到. 该功能一经上线,就引起了网友的热议. 多数人表示不理解,骂社会急躁. 少数人觉得不错,感觉解锁了新技能. 那么问题来 ...

  3. Linux工作笔记035---linux内网测试访问外网网速_外网测试访问内网网速

    JAVA技术交流QQ群:170933152 Linux内网测试访问外网网速:,可以用下载命令测试 外网访问内网,可以用下载工具下载内网的一个文件看就行. 顺便提一下.如果下载ftp服务器上的文件,可以 ...

  4. 电脑如何测网速_测网速小常识

    在我们日常使用的一些测速软件时,里面的功能和名词可大家都知道是什么意思吗?不知道的可以看这里,下面我为大家科普一下吧,如下图: 图片来源于精准测速APP 上传:即上传速度,是指将手机或电脑里面的内容传 ...

  5. 自定义QListWidget实现item被hover时改变图标样式(模仿网易云音乐选项列表)(方法二)

    环境配置 :MinGW + QT 5.12 效果图: 这里需要说明一下:QListWidget是鼠标press时item就会被选中,自定义的TestListWidget类重写了mousePressEv ...

  6. 自定义QListWidget实现item被hover时改变图标样式(模仿网易云音乐选项列表)(方法一)

    环境配置 :MinGW + QT 5.12 效果图: 这里需要说明一下:QListWidget是鼠标press时item就会被选中,自定义的TestListWidget类重写了mousePressEv ...

  7. <Linux开发> ubuntu开发工具-Ubuntu测试网速及实时网速图

    <Linux开发> ubuntu开发工具-Ubuntu测试网速及实时网速图 一.查看网线上行.下行网速 1.安装speedtest-cli工具 water@water-Tower-PC:~ ...

  8. 2021-07-18大学 复习网课 视频 (倍速详细篇)

    目前学校里的网课主要分为以下几种类别:第一种就是中途不会弹出题目,但不能拖动进度条,只能一点点播放,极其耗时间.第二种是中途会弹出题目,也不能拖动进度条.第三种就是鼠标离开视频框就会停止播放的.这样子 ...

  9. 无线服务器网速加快,无线路由器网速慢怎么办?

    六.无线连接速度问题 如果电脑用网线连接路由器上网,网速是正常的:但是手机或者笔记本电脑,连接路由器wifi信号上网时,网速达不好的话,有可能是无线连接速度这个问题引起的. 经常有个用户在微信上咨询了 ...

  10. 2021 百度网盘网页版 倍速播放技巧(亲测有效)

    2021 百度网盘网页版 倍速播放技巧(亲测有效) 安装谷歌浏览器(chrome浏览器) 打开谷歌浏览器,地址栏输入:chrome://extensions/ 或者 直接点这里 在打开的扩展程序 页面 ...

最新文章

  1. Logical Volume Manager(逻辑卷管理)
  2. typescript使用in关键字进行类型守卫
  3. 如何在JSP里自定义标签
  4. PostgreSQL安装和简单配置
  5. mysql 如何凭借几个列_我如何总结MySQL中的几个列
  6. 重磅解读:K8s Cluster Autoscaler模块及对应华为云插件Deep Dive
  7. python queue函数_Python模块:queue
  8. 海量数据挖掘MMDS week6: 支持向量机Support-Vector Machines,SVM
  9. 函数的定义、返回值和参数
  10. 由于没有公钥,无法验证下列签名
  11. 【交通标志识别】基于matlab GUI BP神经网络交通标志识别【含Matlab源码 718期】
  12. python 从useragent中获取操作系统版本号以及浏览器的版本信息
  13. linux 培训感谢信,应用文(考试)应用文(考).doc
  14. 6成人跳槽为钱,最新裸辞调查报告出炉!
  15. 寒冰老师 计算机 山西,计算机科学与技术口号, 计算机培训小组口号
  16. 【C++】抽象和类(2)--如何实现类成员函数?
  17. node安装及node-sass报错的问题
  18. Clickhouse 分布式子查询——global in/join(慎用慎用)
  19. “此用户无法登陆,因为该用户当前已被禁用“,应该怎么解决?#经验#
  20. 考研数学武忠祥 高等数学0基础课笔记 函数和映射

热门文章

  1. MAC里“微软雅黑”字体标准体和粗体无法同时使用问题的解决方法
  2. SAP公有云和私有云解决方案概述
  3. JAVA之长连接、短连接和心跳包
  4. 网络口碑监控系统方案
  5. mysql中+desc用法_mysql desc(DESCRIBE)命令实例讲解
  6. Unity学习资源(超全)汇总 基础+项目+进阶+面试
  7. 测试点击屏幕次数的软件_红蜘蛛5校色仪怎么用?显示器校色及测试色域和色彩精准度详细教程...
  8. UML培训取得姣好成绩,受到客户好评
  9. 计算机扫盲教案,对号入座教案
  10. Java中实现银行ATM 模拟银行账户业务实现存款、取款和余额查询。