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

时间:2016-06-12 18:05:08

标签: c winapi ip

如何获取用户在Winapi的IP控制框中插入的IP,以后我可以验证它?

已经尝试过GetDlgItem(),但它似乎没有以正确的格式存储IP,也许我做错了。我把它存放为DWORD。

任何提示?

2 个答案:

答案 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_IPADDRESSSECOND_IPADDRESSTHIRD_IPADDRESSFOURTH_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);