Это должно быть просто, но не очевидно. Начиная с..Windows 3 или около того, есть панель управления под названием "Телефон", "Телефон" и "Модем". В этой панели управления есть куча информации о том, как модем будет набирать номер, предполагая, что у вас подключен модем. Например, вам нужно набрать 9, чтобы выйти, что такое код области и т.д. Как я могу получить доступ к этой информации программно? Я использую С#.NET 2010.
Как найти правила набора номеров Windows в .NET.
Ответ 1
Я не мог найти способ получить к нему доступ через оболочку .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");
Ответ 2
Вам понадобится использовать Tapi в Windows или вытащить информацию из реестра. Согласно Microsoft Tapi 3.0 не был предназначен для использования из управляемого кода, хотя первая ссылка, похоже, сделала это.
Некоторые статьи для просмотра:
Из ссылки # 2
Взгляните на эти функции TAPI:
-
lineGetTranslateCaps
-
lineTranslateAddress
-
lineTranslateDialog
-
lineSetCurrentLocation
-
lineGetCountry
-
tapiGetLocationInfo
Информация хранится в реестре по адресу: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations
Ответ 3
Бит больше кода, чтобы получить префикс
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([email protected]"\"+location);
}
}