10

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

4

3 に答える 3

12

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

見るべきいくつかの記事:

  1. Tapi3.0アプリケーション開発
  2. TAPIダイヤリングルールにアクセスするVB.Net

リンク#2から

これらのTAPI関数を見てください。

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

情報は、次のレジストリに保存されます。 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations

于 2011-12-08T23:50:47.037 に答える
8

.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. .net互換のAPIがある場合は、公式APIを使用することをお勧めします。
  2. このコードは、Win7以外のOSで動作することが保証されていません
  3. これらの詳細を入力するようにユーザーに求める必要がある場合は、次を使用して構成ツールを開始できます。

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

于 2011-12-09T00:12:28.350 に答える
0

プレフィックスを取得するためのもう少しコード

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


        }

    }
于 2014-01-08T21:28:30.127 に答える