Как найти правила набора номеров Windows в .NET.

Это должно быть просто, но не очевидно. Начиная с..Windows 3 или около того, есть панель управления под названием "Телефон", "Телефон" и "Модем". В этой панели управления есть куча информации о том, как модем будет набирать номер, предполагая, что у вас подключен модем. Например, вам нужно набрать 9, чтобы выйти, что такое код области и т.д. Как я могу получить доступ к этой информации программно? Я использую С#.NET 2010.

Ответ 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);


        }

    }