Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从用户获取IP输入并验证WINAPI_C_Winapi_Ip - Fatal编程技术网

C 从用户获取IP输入并验证WINAPI

C 从用户获取IP输入并验证WINAPI,c,winapi,ip,C,Winapi,Ip,如何获取用户在Winapi的IP控制框中插入的IP,并在之后进行验证 已经尝试过GetDlgItem(),但它似乎没有以正确的格式存储IP,可能是我做错了。我将它存储为DWORD 有什么提示吗?您可以通过发送一条消息从中检索IP地址1): 返回时,DWORD包含IP地址,其中MSB存储第一个八位字节,而LSB存储第四个八位字节。您可以将地址输出为人类可读的格式,如下所示: printf("%u.%u.%u.%u\n", (dwAddr >> 24) & 0xff,

如何获取用户在Winapi的IP控制框中插入的IP,并在之后进行验证

已经尝试过GetDlgItem(),但它似乎没有以正确的格式存储IP,可能是我做错了。我将它存储为DWORD


有什么提示吗?

您可以通过发送一条消息从中检索IP地址1):

返回时,
DWORD
包含IP地址,其中MSB存储第一个八位字节,而LSB存储第四个八位字节。您可以将地址输出为人类可读的格式,如下所示:

printf("%u.%u.%u.%u\n", (dwAddr >> 24) & 0xff,
                        (dwAddr >> 16) & 0xff,
                        (dwAddr >>  8) & 0xff,
                        (dwAddr      ) & 0xff);
或者,使用、和宏提取地址信息:

printf("%u.%u.%u.%u\n", FIRST_IPADDRESS(dwAddr), SECOND_IPADDRESS(dwAddr),
                        THIRD_IPADDRESS(dwAddr), FOURTH_IPADDRESS(dwAddr));


1) 由于地址以压缩形式返回为
DWORD
,因此无需验证它,因为任何
DWORD
(如果解释为IPv4地址的4部分)都是有效地址。

正如IInspectable所指出的,一种方法是发送消息,而第二种也是最简单的方法是调用。这将删除不必要的printf

WCHAR wAddress[64] = {0};
GetWindowTextW(hWndIpAddr, wAddress, 32);

我使用
printf
来说明如何从
DWORD
中提取单个信息。不需要。现在,如果您检索文本表示,您将必须解析出标记以将其存储到一个文本中,例如。这确实是常见的用例。有一些宏用于从
DWORD
中提取单个组件:
第一个\u IPADDRESS()
第二个\u IPADDRESS()
,等等。
WCHAR wAddress[64] = {0};
GetWindowTextW(hWndIpAddr, wAddress, 32);