Как найти правила набора номера в Windows.NET
Это должно быть просто, но не очевидно. Так как...Windows 3 или около того, есть панель управления под названием Телефон или Телефон и модем. На этой панели управления находится информация о том, как модем будет дозваниваться, если вы подключили модем. Например, вам нужно набрать 9, чтобы получить, какой код города и так далее. Как я могу получить доступ к этой информации программно? Я использую C# .NET 2010.
3 ответа
Я не смог найти способ получить к нему доступ через оболочку.Net TAPI (после не очень долгого поиска), поэтому я запустил procmon для поиска, где он хранился в реестре, и вот код, который обращается к нему (вы можете адаптировать это для ваших конкретных потребностей):
RegistryKey locationsKey =
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations");
if (locationsKey == null) return;
string[] locations = locationsKey.GetSubKeyNames();
foreach (var location in locations)
{
RegistryKey key = locationsKey.OpenSubKey(location);
if (key == null) continue;
Console.WriteLine("AreaCode {0}",key.GetValue("AreaCode"));
Console.WriteLine("Country {0}",(int) key.GetValue("Country"));
Console.WriteLine("OutsideAccess {0}", key.GetValue("OutsideAccess"));
}
Замечания:
- Я рекомендую использовать официальный API, если есть.net-совместимый.
- Этот код не гарантированно работает на других ОС, кроме Win 7
- Если вам нужно предложить пользователю заполнить эти данные, вы можете запустить инструмент конфигурации, используя:
Process.Start(@"C:\Windows\System32\rundll32.exe",@"C:\Windows\System32\shell32.dll,Control_RunDLL C:\Windows\System32\telephon.cpl");
Вам нужно будет использовать Tapi в Windows или извлечь информацию из реестра. Согласно Microsoft, Tapi 3.0 не был предназначен для использования из управляемого кода, хотя первая ссылка, похоже, сделала это.
Некоторые статьи, чтобы посмотреть:
Из ссылки № 2
Взгляните на эти функции TAPI:
lineGetTranslateCaps
lineTranslateAddress
lineTranslateDialog
lineSetCurrentLocation
lineGetCountry
tapiGetLocationInfo
Информация хранится в реестре по адресу: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations
Немного больше кода, чтобы получить префикс
class Program
{
static void Main(string[] args)
{
string rootLocation = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations";
getRegistryValues(rootLocation);
Console.ReadLine();
}
public static void getRegistryValues(string rootLocation)
{
RegistryKey locationsKey =
Registry.LocalMachine.OpenSubKey(rootLocation);
if (locationsKey == null) return;
string[] locations = locationsKey.GetSubKeyNames();
Console.WriteLine(locations.Length.ToString());
foreach (var location in locations)
{
Console.WriteLine(location.ToString());
RegistryKey key = locationsKey.OpenSubKey(location);
if (key == null) continue;
foreach (string keyName in key.GetValueNames())
{
if (keyName.Equals("Prefixes"))
{
string[] Prefixes = ((string[])(key.GetValue(keyName)));
Console.Write("Prefixes ");
foreach (string prefix in Prefixes)
{
Console.Write(prefix);
}
}
else
{
Console.WriteLine(keyName + " {0}", key.GetValue(keyName));
}
}
getRegistryValues(rootLocation+@"\"+location);
}
}