3

我有一个需要控制移动宽带 API 的应用程序。

我正在努力在我的设备上正确安装 api。

我一直按照本文档中的说明进行操作:

http://www.google.be/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=1&cad=rja&ved=0CC0QFjAA&url=http%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F7%2FE% 2F7%2F7E7662CF-CBEA-470B-A97E-CE7CE0D98DC2%2FMB_ManagedCode.docx&ei=kyvmUs7jE4e60QWbooHYDg&usg=AFQjCNG6yaGf4sRhdbWI99fE7tmQX8cmnA&sig2=2Fg-_DRYBIselKR19wTq2Q

并尝试将这些步骤与这个 stackoverflow 解释结合起来

C# 读取 Windows Mobile 宽带连接属性

我已经能够在 V7.0/lib 中提供从 Visual Studio 到 mbnapi.tlb 的参考。我现在自动在我的 obj/debug 文件夹中有一个 interop.mbnapi.tlb。

尝试“检查 SIM 卡是否已插入并正常工作/激活”时。=> 我的代码在以下行崩溃

IMbnInterface[] mobileInterfaces = mbnInfMgrInterface.GetInterfaces() as IMbnInterface[];

当我在 Windows 8 上运行它时,mbnInfMgrInterface == null

我已经尝试按照文档要求在 Windows 8 上安装相同的 SDK,但 SDK 仅适用于 Windows 7 ...

我试图通过执行在 Windows 8 中注册 mbnapi

Regtlibv12 Mbnapi.tlb

一点运气都没有……

我需要做什么才能让它工作?

有人有这方面的经验吗?

编辑。在 Windows 7(我的开发机器)上,我收到消息“设备未准备好”,我认为这很正常,因为我没有移动宽带,在 Windows 8 上我有,但移动界面管理器为 null = > mbnInfMgrInterface == 空。

谢谢你,

4

1 回答 1

0

不确定您到底在追求什么,但在与 IMbnInterface 和 GetSignalStrength() 苦苦挣扎之后(请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/dd323166(v=vs.85).aspx)不成功,我发现你可以使用 WMI 获得很多信息:

        int maxBandwidth = 0;
        string query = "SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface";
        ManagementObjectSearcher moSearch = new ManagementObjectSearcher(query);
        ManagementObjectCollection moCollection = moSearch.Get();
        foreach (ManagementObject mo in moCollection)
        {
            if (Convert.ToInt32(mo["CurrentBandwidth"]) > maxBandwidth)
            {
                // Instead of CurrentBandwidth you may want to use BytesReceivedPerSec
                maxBandwidth = Convert.ToInt32(mo["CurrentBandwidth"]);
            }
        }

请在此处查看答案:确定网络连接链接速度,这是您可以获得的属性列表:https ://msdn.microsoft.com/en-us/library/aa394293(VS.85).aspx

更新:

请注意,我可以在 Windows 7 或 Windows 8.1 上的 Visual Studio 2015 中构建和调试上述代码(作为更大的 WPF 应用程序的一部分),并且我可以将相同的应用程序部署到成功运行的 Windows 7 上。出于某种原因,当我在 Windows 8.1 上部署此应用程序时,我收到一条Invalid query消息。

更新 2:

请注意,我发现您无法像在 Windows 7 中那样在 Windows 8.1 中获取网络信息,因为System.Management命名空间在 Windows 8.1 上不可用。请参阅https://code.msdn.microsoft.com/windowsapps/network-information-sample-63aaa201

        string connectionProfileInfo = string.Empty;
        ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile();

        if (InternetConnectionProfile == null)
        {
            rootPage.NotifyUser("Not connected to Internet\n", NotifyType.StatusMessage);
        }
        else
        {
            connectionProfileInfo = GetConnectionProfile(InternetConnectionProfile);
            OutputText.Text = connectionProfileInfo;
            rootPage.NotifyUser("Success", NotifyType.StatusMessage);
        }

        // Which calls this function, that allows you to determine how strong the signal is and the associated bandwidth
        string GetConnectionProfile(ConnectionProfile connectionProfile)
        {
            // ...
                if (connectionProfile.GetSignalBars().HasValue)
                {
                    connectionProfileInfo += "====================\n";
                    connectionProfileInfo += "Signal Bars: " + connectionProfile.GetSignalBars() + "\n";
                }
            // ...
        } 
于 2017-03-27T23:40:39.740 回答