2011-12-08 13 views
10

Esto debería ser simple, pero aparentemente no. Desde ... Windows 3 o más, hay un panel de control llamado Teléfono o Teléfono & Módem. En ese panel de control hay un montón de información sobre cómo un módem marcaría, suponiendo que tienes un módem conectado. Por ejemplo, necesita marcar 9 para salir, cuál es el código de área, etc. ¿Cómo puedo acceder a esta información programáticamente? Estoy usando C# .NET 2010.Cómo encontrar las reglas de marcado de Windows en .NET

Respuesta

8

no pude encontrar una manera de Acceso a través de .Ne envoltorio t TAPI (después de una búsqueda no tan largo), así que encendió procmon una encontradas en los que se almacena en el registro, y aquí está el código que accede a ella (se puede adaptar a sus necesidades específicas):

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

Nota:

  1. recomiendo usar una API oficial si hay una compatible .NET.
  2. Este código no se garantiza que funcione en otros sistemas operativos de Windows 7
  3. Si necesita pedir al usuario que rellene estos datos se puede iniciar la herramienta de configuración usando:

Process.Start(@"C:\Windows\System32\rundll32.exe",@"C:\Windows\System32\shell32.dll,Control_RunDLL C:\Windows\System32\telephon.cpl");

12

Vas a necesitar usar Tapi en Windows o extraer la información del registro. De acuerdo con Microsoft Tapi 3.0 no fue diseñado para ser utilizado desde código administrado, aunque el primer enlace parece haberlo hecho.

Algunos artículos que miran:

  1. Tapi3.0 Application Development
  2. VB.Net accessing TAPI Dialing Rules

De Enlace # 2

Tome un vistazo a estas funciones TAPI:

  1. lineGetTranslateCaps
  2. lineTranslateAddress
  3. lineTranslateDialog
  4. lineSetCurrentLocation
  5. lineGetCountry
  6. tapiGetLocationInfo

La información se almacena en el registro en: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations

+0

Esto es genial, gracias a los dos. – Rob

0

Poco más código para obtener el prefijo

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


     } 

    } 
Cuestiones relacionadas