首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 
设为首页
加入收藏
联系我们
热门关键字: .net应用  操作系统  Dreamweaver  WinRAR  网络推广
高级搜索
您当前的位置: 主页>C/C++>开发工具>VC++更改系统IP地址的方法代码
VC++更改系统IP地址的方法代码
来源: 发布时间:2008-06-01 发布人: 浏览: 人次   字体: [ ]  
今天完成了用VC++更改系统的IP地址的功能。

根据网上的代码,我改了几天。里面讲的几个函数在MSDN里找不到,只有自已一个一个慢慢理解。

现在我虽然还不是相当的明白每个函数的意思,但是总体已经理解啦,而且在本机上运行良好。

就我碰到的几个问题:

一、在一个dll文件中获取一个函数的时候,函数未定义 ,这个原因是因为声明的问题;
二、编译时候连接出问题,这个是因为没有在project-setting-link里没有加上要连接的几个lib文件

如果有网友对程序有什么问题可以留言,我会尽早回复。
现把我在网上找到的代码放在下面。

**********************************************
有很多网友都遇到过更改IP地址但是要重启机器的问题,在这里,为大家介绍几种不重启Windows直接更改IP地址的方法。首先是调用
DhcpNotifyConfigChange的方法,后面还有修改注册表跟使用"iphlpapi"的方法。
 一、未公开函数:DhcpNotifyConfigChange

  运行效果图如下:

设置IP地址只需要更改注册表中关于适配器的相应设置,但更改后需要重新启动系统才能生效,而AddIPAddress函数只能添加IP而不是
更改当前的IP,我们在Windows NT/2000界面上操作不需要重新启动就可以生效,那系统到底做了什么额外的工作才使IP设置直接生效呢
?笔者通过跟踪explorer.exe中API的调用发现在netcfgx.dll中调用了dhcpcsvc.dll中一个未公开的API:DhcpNotifyConfigChange,现
将不重新启动WINDOWS直接更改IP地址的详细方法介绍如下:

  1、获取适配器名称

  这里指的适配器名称要区别于适配器描述,比如我的一块网卡,适配器描述是:Realtek RTL8139(A) PCI Fast Ethernet Adapter
,适配器名称为:{66156DC3-44A4-434C-B8A9-0E5DB4B3EEAD}。获取适配器名称的方法有多种:

  1.1 调用IP helper API取得适配器名称

//********************************************
ULONG ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO);
IP_ADAPTER_INFO *pAdapterInfoBkp, *pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];

if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_BUFFER_OVERFLOW ) // 缓冲区不够大
{
delete pAdapterInfo;
pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
pAdapterInfoBkp = pAdapterInfo;
}


if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_SUCCESS )
{
do{
    // 遍历所有适配器
if(pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET) // 判断是否为以太网接口
{
// pAdapterInfo->Description 是适配器描述
// pAdapterInfo->AdapterName 是适配器名称
}
pAdapterInfo = pAdapterInfo->Next;
}while(pAdapterInfo);
}
delete pAdapterInfoBkp;

//*********************************************

1.2 读取注册表取得适配器名称

  在Windows2000中可以通过遍历
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\000n\
(n是从0开始编号的数字)所有接口, 在Windows NT中可以读取
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards
中的信息,下面以Windows2000为例:

//*********************************************
HKEY hKey, hSubKey, hNdiIntKey;

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"System\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-08002be10318}",0,KEY_READ,&hKey) != ERROR_SUCCESS)
return FALSE;

DWORD dwIndex = 0;
DWORD dwBufSize = 256;
DWORD dwDataType;
char szSubKey[256];
unsigned char szData[256];

while(RegEnumKeyEx(hKey, dwIndex++, szSubKey, &dwBufSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
if(RegOpenKeyEx(hKey, szSubKey, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS)
{
if(RegOpenKeyEx(hSubKey, "Ndi\\Interfaces", 0, KEY_READ, &hNdiIntKey) == ERROR_SUCCESS)
{
dwBufSize = 256;
if(RegQueryValueEx(hNdiIntKey, "LowerRange", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
{
if(strcmp((char*)szData, "ethernet") == 0) // 判断是不是以太网卡
{
dwBufSize = 256;
if(RegQueryValueEx(hSubKey, "DriverDesc", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
{
// szData 中便是适配器详细描述
dwBufSize = 256;
if(RegQueryValueEx(hSubKey, "NetCfgInstanceID", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
{
// szData 中便是适配器名称
}}}}
RegCloseKey(hNdiIntKey);
}
RegCloseKey(hSubKey);
}

dwBufSize = 256;
} /* end of while */

RegCloseKey(hKey);

//****************************************

共3页: 上一页 1 [2] [3] 下一页
↓下一篇:没有了
相 关 文 章   发布商链接
·图解VC2005之创建解决方案祥细步骤
·如何在Tree空件上实现点右健选中Item...
·如何在程序中获得其他程序的图标?
·VC怎样加载其他的应用程序?
·Visual C++编程技巧实用小结14例
·Visual C++开发工具与调试技巧整理
·Visual C++设计超强仿QQ自动伸缩窗口
·在VC6.0下配置boost库使用正则表达式
·VC实现多文件文本替换的解决方案
·在VC中创建DLL文件的方法步骤祥解
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·如何消除vc屏幕闪烁的方法?
·在CListView控件添加右键弹出
·MFC中利用CMenu类动态添加弹...
·详解如何在VC++下动态调整水...
·如何在VC++下完全动态生成水...
·C++builder调试时提示找不到b...
·vc实现定时执行任务的两种方...
·VC使用定时机制的几种方法
·VC制作使用图片做为背景的对...
·Vc中自定义消息及其触发使用
·在VC中创建DLL文件的方法步骤
·VC实现多文件文本替换的解决...
·在VC6.0下配置boost库使用正...
·Visual C++设计超强仿QQ自动...
·Visual C++开发工具与调试技...
热 门 文 章
·图解VC2005之创建解决方案祥...
·Vc中自定义消息及其触发使用
·在VC中创建DLL文件的方法步骤...
·VC使用定时机制的几种方法
·Visual C++开发工具与调试技...
·Visual C++设计超强仿QQ自动...
·MFC中利用CMenu类动态添加弹...
·Visual C++编程技巧实用小结1...
·在CListView控件添加右键弹出...
·vc实现定时执行任务的两种方...
·VC实现多文件文本替换的解决...
·VC制作使用图片做为背景的对...
·如何在VC++下完全动态生成水...
·如何消除vc屏幕闪烁的方法?
·在VC6.0下配置boost库使用正...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .