Как найти правила набора номера в 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"));
}

Замечания:

  1. Я рекомендую использовать официальный API, если есть.net-совместимый.
  2. Этот код не гарантированно работает на других ОС, кроме Win 7
  3. Если вам нужно предложить пользователю заполнить эти данные, вы можете запустить инструмент конфигурации, используя:

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 не был предназначен для использования из управляемого кода, хотя первая ссылка, похоже, сделала это.

Некоторые статьи, чтобы посмотреть:

  1. Разработка приложений Tapi3.0
  2. VB.Net доступ к правилам набора TAPI

Из ссылки № 2

Взгляните на эти функции TAPI:

  1. lineGetTranslateCaps
  2. lineTranslateAddress
  3. lineTranslateDialog
  4. lineSetCurrentLocation
  5. lineGetCountry
  6. 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);


        }

    }
Другие вопросы по тегам