2011-12-08 15 views
10

Questo dovrebbe essere semplice, ma non apparentemente. Dal momento che Windows 3 o giù di lì, c'è un pannello di controllo chiamato Telefono o Telefono & Modem. In quel pannello di controllo ci sono un sacco di informazioni su come un modem si connetterebbe, supponendo che tu abbia un modem collegato. Ad esempio, è necessario comporre 9 per uscire, qual è il prefisso e così via. Come posso accedere a queste informazioni a livello di programmazione? Sto usando C# .NET 2010.Come trovare le regole di composizione di Windows in .NET

risposta

8

non riuscivo a trovare un modo per accedere attraverso un t TAPI involucro (dopo un non molto tempo di ricerca) e quindi ho sparato procmon un trovato dove era stato archiviato nel Registro di sistema, ed ecco il codice che vi accede (è possibile adattare alle proprie esigenze specifiche):

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. vi consiglio di utilizzare un'API ufficiale se c'è uno compatibile .net.
  2. Questo codice non è garantito per lavorare su altri sistemi operativi di Windows 7
  3. Se è necessario richiedere all'utente di compilare questi dettagli è possibile avviare lo strumento di configurazione utilizzando:

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

12

È necessario utilizzare Tapi in Windows o estrarre le informazioni dal registro. Secondo Microsoft Tapi 3.0 non è stato progettato per essere utilizzato dal codice gestito, anche se il primo collegamento sembra averlo fatto.

Alcuni articoli da guardare:

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

Dal link # 2

Date un'occhiata a queste funzioni TAPI:

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

Le informazioni sono memorizzate nel Registro di sistema a: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations

+0

Questo è fantastico, grazie a tutti e due. – Rob

0

Bit più codice per ottenere il prefisso

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


     } 

    } 
Problemi correlati