Борется с мобильными широкополосными API Windows 7 и Windows 8 с C#, не уверен, что установить
У меня есть приложение, которое требует управления мобильным широкополосным API.
Я борюсь за правильную установку API на моих устройствах.
Я следовал инструкциям в этом документе:
и пытается объединить шаги с этим объяснением
C# чтение свойств широкополосного подключения Windows Mobile
Мне удалось заложить ссылку из Visual Studio на mbnapi.tlb в V7.0/lib. и у меня автоматически теперь есть interop.mbnapi.tlb в моей папке obj/debug.
При попытке "проверить, вставлена ли SIM-карта и работает / активирована". => мой код падает на следующей строке
IMbnInterface[] mobileInterfaces = mbnInfMgrInterface.GetInterfaces() as IMbnInterface[];
Когда я запускаю его в Windows 8, mbnInfMgrInterface == null
Я уже пытался установить тот же SDK на Windows 8, как указано в требованиях документа, но SDK предназначен только для Windows 7...
Я попытался зарегистрировать mbnapi в Windows 8, выполнив
Regtlibv12 Mbnapi.tlb
не повезло вообще...
Что мне нужно сделать, чтобы заставить это работать, пожалуйста?
У кого-нибудь есть опыт в этом?
РЕДАКТИРОВАТЬ. в Windows 7 (на моей машине для разработки) я получаю сообщение "Устройство не готово", я думаю, что это нормально, потому что у меня нет мобильной широкополосной связи, в Windows 8 у меня есть, но там менеджер мобильного интерфейса имеет значение null = > mbnInfMgrInterface == ноль.
благодарю вас,
1 ответ
Не знаю точно, что вам нужно, но после борьбы с 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
ОБНОВИТЬ:
Обратите внимание, что я могу создать и отладить вышеуказанный код (как часть более крупного приложения WPF) из Visual Studio 2015 в Windows 7 или Windows 8.1, и я могу развернуть то же приложение в Windows 7, где оно успешно работает. По какой-то причине при развертывании этого приложения в Windows 8.1 я получаю Invalid query
сообщение.
ОБНОВЛЕНИЕ 2:
Обратите внимание, что я обнаружил, что вы не можете получить информацию о сети в Windows 8.1 так же, как в Windows 7, поскольку 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";
}
// ...
}