如何获取用户在Winapi的IP控制框中插入的IP,以后我可以验证它?
已经尝试过GetDlgItem(),但它似乎没有以正确的格式存储IP,也许我做错了。我把它存放为DWORD。
任何提示?
答案 0 :(得分:3)
您通过发送IP Address Control消息 1)从IPM_GETADDRESS检索IP地址:
public async static Task<string> GetFolderPathFromTheUser()
{
FolderPicker folderPicker = new FolderPicker();
folderPicker.ViewMode = PickerViewMode.Thumbnail;
folderPicker.FileTypeFilter.Add(".");
var folder = await folderPicker.PickSingleFolderAsync();
return FutureAccessList.Add(folder);
}
public async static Task<bool> IsContainImageFiles(string accessToken)
{
IStorageFolder folder = await FutureAccessList.GetFolderAsync(accessToken);
IReadOnlyList<StorageFile> temp= await folder.GetFilesAsync();
foreach (StorageFile sf in temp)
{
if (sf.ContentType == "jpg")
return true;
}
return false;
}
返回时,DWORD dwAddr = 0x0;
SendMessage(hWndIpAddr, IPM_GETADDRESS, 0, (LPARAM)&dwAddr);
包含IP地址,MSB存储第一个八位字节,而LSB存储第四个八位字节。您可以以人类可读的格式输出地址,如下所示:
DWORD
或者,使用FIRST_IPADDRESS,SECOND_IPADDRESS,THIRD_IPADDRESS和FOURTH_IPADDRESS宏来提取地址信息:
printf("%u.%u.%u.%u\n", (dwAddr >> 24) & 0xff,
(dwAddr >> 16) & 0xff,
(dwAddr >> 8) & 0xff,
(dwAddr ) & 0xff);
<小时/> 1) 由于地址以打包的形式作为
printf("%u.%u.%u.%u\n", FIRST_IPADDRESS(dwAddr), SECOND_IPADDRESS(dwAddr),
THIRD_IPADDRESS(dwAddr), FOURTH_IPADDRESS(dwAddr));
返回,因此无需对其进行验证,因为任何DWORD
(如果解释为4个部分) (IPv4地址)是一个有效的地址。
答案 1 :(得分:-1)
正如IInspectable指出的那样,一种方式是发送IPM_GETADDRESS消息,但第二种也是最简单的方法是调用GetWindowText。这删除了不必要的printf。
WCHAR wAddress[64] = {0};
GetWindowTextW(hWndIpAddr, wAddress, 32);