10
votes

Comment trouver les règles de numérotation Windows dans .NET

Cela devrait être simple, mais n'est pas apparemment. Depuis. Ils sont environ 3 environ, il y a un panneau de commande appelé téléphone ou modem. Dans ce panneau de contrôle, il s'agit d'un groupe d'informations sur la manière dont un modem en manifestation, en supposant que vous ayez un modem raccordé. Par exemple, devez-vous composer le 9 pour sortir, quel est l'indicatif régional, etc. Comment puis-je accéder à ces informations par programme? J'utilise c # .NET 2010.


0 commentaires

3 Réponses :


12
votes

Vous aurez besoin d'utiliser TAPI sous Windows ou de tirer les informations du registre. Selon Microsoft Tapi 3.0 n'a pas été conçu pour être utilisé à partir du code géré, bien que le premier lien semble l'avoir fait.

Certains articles à regarder:

  1. TAPI3.0 Développement d'applications
  2. VB.NET Accédant à des règles de numérotation TAPI

    du lien # 2

    Regardez ces fonctions TAPI:

    1. linegetTranslatecaps
    2. LINÉTRANSLATADDRESSE
    3. linetranslateialog
    4. listesTCurrentLocation
    5. linegetCountry
    6. TapIGetLocationInfo

      Les informations sont stockées dans le registre à l'adresse suivante: HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Téléphonie \ emplacements


0 commentaires

8
votes

Je n'ai pas pu trouver un moyen d'y accéder via un wrapper .NET TAPI (après une recherche pas si longue), donc j'ai tiré sur ProCmon a trouvé où il a été stocké dans le registre, et voici le code qui l'accède (vous pouvez l'adapter à vos besoins spécifiques):

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"));
}


0 commentaires

0
votes

Bit plus de code pour obtenir le préfixe

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);


        }

    }


0 commentaires