通过RegOpenKeyEx和RegQueryValueEx获取wince设备的IP
来源:互联网 发布:淘宝嗅觉系是真的吗? 编辑:程序博客网 时间:2024/05/21 05:17
wince嵌入式应用程序
// test_api.cpp : 定义应用程序的入口点。#include "stdafx.h"#include "test_api.h"#include <windows.h>#include <commctrl.h>#include <time.h>#include <stdio.h>typedef struct _NETWORK_ADPT_INFO { BOOL fUseDHCP; BOOL fSaved; DWORD IPAddr; DWORD SubnetMask; DWORD Gateway; DWORD DNSAddr; DWORD DNSAltAddr; DWORD WINSAddr; DWORD WINSAltAddr;} NETWORK_ADPT_INFO, *PNETWORK_ADPT_INFO;BOOL StringToAddr(TCHAR *AddressString, DWORD *AddressValue) { TCHAR *pStr = AddressString; PUCHAR AddressPtr = (PUCHAR)AddressValue; int i; int Value; // Parse the four pieces of the address. for (i=0; *pStr && (i < 4); i++) { Value = 0; while (*pStr && TEXT('.') != *pStr) { if ((*pStr < TEXT('0')) || (*pStr > TEXT('9'))) { return FALSE; } Value *= 10; Value += *pStr - TEXT('0'); pStr++; } if (Value > 255) { return FALSE; } AddressPtr[i] = Value; if (TEXT('.') == *pStr) { pStr++; } } // Did we get all of the pieces? if (i != 4) { return FALSE; } return TRUE;} VOID GetMultiSZAddr (HKEY hKey, LPTSTR szValueName, LPDWORD pAddr1, LPDWORD pAddr2){ TCHAR szTemp[256]; LPTSTR szPtr; LONG hRes; DWORD dwSize, dwType; dwSize = sizeof(szTemp); hRes = RegQueryValueEx (hKey, szValueName, 0, &dwType, (LPBYTE)szTemp,&dwSize); if ((hRes == ERROR_SUCCESS) && ((dwType == REG_SZ) || (dwType == REG_MULTI_SZ))) { if (pAddr1 && szTemp[0]) { StringToAddr (szTemp, pAddr1); } if (pAddr2 && szTemp[0] && (dwType == REG_MULTI_SZ)) { szPtr = szTemp; while (*szPtr) { szPtr++; } // Move past the null. szPtr++; if (*szPtr) { StringToAddr (szPtr, pAddr2); } } }}BOOL GetIPAddress(wchar_t * pAdapterName,PNETWORK_ADPT_INFO pAdapter){ wchar_t strKeyName[64]; DWORD type; memset ((char *)pAdapter, 0, sizeof(NETWORK_ADPT_INFO)); pAdapter->fUseDHCP = TRUE; swprintf(strKeyName,L"Comm\\%s\\Parms\\TCPIP",pAdapterName); HKEY hKey; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,strKeyName,0,KEY_WRITE,&hKey) != ERROR_SUCCESS) return FALSE; DWORD dwSize = sizeof(DWORD); LONG hRes = RegQueryValueEx (hKey, TEXT("EnableDHCP"), 0, &type,(LPBYTE)&pAdapter->fUseDHCP,&dwSize); if(hRes == ERROR_SUCCESS && !pAdapter->fUseDHCP){ GetMultiSZAddr (hKey, TEXT("IpAddress"),&pAdapter->IPAddr, NULL); GetMultiSZAddr (hKey, TEXT("Subnetmask"),&pAdapter->SubnetMask, NULL); GetMultiSZAddr (hKey, TEXT("DefaultGateway"),&pAdapter->Gateway, NULL); } GetMultiSZAddr (hKey, TEXT("DNS"), &pAdapter->DNSAddr,&pAdapter->DNSAltAddr); RegCloseKey(hKey); return TRUE;}void IPAddrToStr (char* szStr, DWORD IPAddr){ sprintf(szStr, "%d.%d.%d.%d", IPAddr & 0xFF , (IPAddr >> 8) & 0xFF , (IPAddr >> 16) & 0xFF, (IPAddr >> 24) & 0xFF);}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ wchar_t UsbNetWorkName[32] = L"EMAC1"; NETWORK_ADPT_INFO tAdapterInfo = {0}; char g_localip[16] = {0}; printf("\n\n######\n"); if (GetIPAddress((wchar_t*)UsbNetWorkName,&tAdapterInfo)){ IPAddrToStr(g_localip,tAdapterInfo.IPAddr); printf("IPAddrToStr >>> %s\n", g_localip); }else{ printf("IPAddrToStr >>> %s\n", "failed"); } printf("######\n\n"); return 0;}
在嵌入式平台上运行结果
加载模块: test_api.exe加载模块: coredll.dll######IPAddrToStr >>> 192.168.1.123######程序“[3ae0036] test_api.exe”已退出,返回值为 0 (0x0)。
关于使用EMAC1
这是一个焊接了EMAC1网卡芯片的wince嵌入式设备
在程序中使用注册表,不外乎创建、打开、读取、设置、删除这五个常规操作
创建键值 RegCreateKeyEx
打开键值 RegOpenKeyEx
读取键值 RegQueryValueEx
设置键值 RegSetValueEx
删除键值 RegDeketeKey
例程中读取网卡芯片EMAC1中IP对应的键值,用到对应的接口 RegOpenKeyEx RegQueryValueEx
附Linux下获取本地IP
在Linux下面使用结构体struct ifreq获取IP地址,wince程序中并不提供对应的接口
char *ipaddr;struct hostent *hp;int sockfd; struct sockaddr_in sin; struct ifreq ifr; sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd == -1) { return -1; } strncpy(ifr.ifr_name, "eth0", IFNAMSIZ);//网卡多的得修改下 ifr.ifr_name[IFNAMSIZ - 1] = 0; if (ioctl(sockfd, SIOCGIFADDR, &ifr) < 0){ return -1; } memcpy(&sin, &ifr.ifr_addr, sizeof(sin)); ipaddr=inet_ntoa(sin.sin_addr);
阅读全文
0 0
- 通过RegOpenKeyEx和RegQueryValueEx获取wince设备的IP
- 注册表RegOpenKeyEx、RegQueryValueEx、RegCreateKeyEx和RegSetValueEx编程
- WinCE RegQueryValueEx 返回值的问题
- wince获取IP地址,无线和有线
- Wince获取MAC地址和 ip地址
- 通过网线直连设备获取设备IP地址
- IOS获取设备的IP
- 获取设备的局域网IP
- android 获取设备的IP和Mac地址
- 局域网内获取周围设备的ip和端口
- 获取andorid设备的IP地址和MAC地址
- WinCE获取设备ID
- WINCE 获取设备ID
- WINCE获取设备ID
- Angry IP Scanner 获取设备的IP
- iOS 怎样通过UDP发送广播寻找设备,拿到局域网的设备ip 和 端口
- 【记录】通过IP地址获取局域网中设备的MAC地址——java实现
- 通过JMX获取weblogic的IP地址和端口
- java中使用socket进行udp方式通信时拔掉网线会导致send()方法阻塞
- 关于hibernate通过注解方式自动生成表时字段的顺序问题
- Android使用VideoView播放网络视频,获取网络视频缩略图
- TensorFlow
- js性能优化
- 通过RegOpenKeyEx和RegQueryValueEx获取wince设备的IP
- 环信ease-sdk-3.3.4_r1 集成用户头像 昵称功能的简单处理方法
- oracle查看允许的最大连接数
- webpack从入门到放弃
- Java遍历数组
- 为RIDE创建桌面快捷方式
- 【安全牛学习笔记】搜索引擎、SHODAN
- Android5.0之Activity的转场动画
- sed 的用法