2011-12-08 10 views
10

これは単純なはずですが、明らかにそうではありません。 Windows 3以降では、電話機または電話機&モデムと呼ばれるコントロールパネルがあります。そのコントロールパネルには、モデムの接続方法に関する情報がたくさんあります。たとえば、出て行くために9をダイヤルする必要がありますか、市外局番は何ですか。この情報にプログラムでアクセスするにはどうすればよいですか?私はC#.NET 2010を使用しています。.NETでWindowsのダイヤル規則を見つける方法

答えて

8

私がアクセスする方法を見つけることができませんでしたそれは.Neを通して

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")); 
} 
:(それほど長くない検索後)のT TAPIラッパーは、私はそれがレジストリに格納されていた場所を見つけて、それをここにアクセスするコードは(あなたがあなたの特定のニーズに適応させることができます)です procmon気合

注:.NET互換性がある場合

  1. 私は公式のAPIを使用することをお勧めします。

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

12

WindowsでTapiを使用するか、レジストリから情報を取得する必要があります。 Microsoft Tapi 3.0によると、管理されたコードからは使用されないように設計されていましたが、最初のリンクではそうしていたようです。

  1. :リンク#2

    から

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

    は、これらのTAPIの機能を見てみましょう:で

    いくつかの記事を見てlineGetTranslateCaps

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

情報がでレジストリに保存されています。HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations

+0

これはあなたのおかげで素晴らしいです。 – Rob

0

  • このコードは、あなたが使用して設定ツールを起動することができ、これらの詳細に記入を促す必要がある場合は勝利7
  • 以外のOS上で動作することが保証されていません接頭辞を取得するためのコードをもう少し追加してください

    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); 
    
    
         } 
    
        } 
    
  • 関連する問題