这应该很简单,但显然不是。由于..Windows 3 左右,有一个控制面板称为电话或电话和调制解调器。在那个控制面板中有一堆关于调制解调器如何拨号的信息,假设你连接了一个调制解调器。例如,是否需要拨 9 才能出去,区号是多少等等。如何以编程方式访问此信息?我正在使用 C# .NET 2010。
问问题
1673 次
3 回答
12
您将需要在 Windows 中使用 Tapi 或从注册表中提取信息。根据 Microsoft Tapi 3.0 的设计目的不是从托管代码中使用,尽管第一个链接似乎已经做到了。
一些文章可以看:
来自链接#2
看看这些 TAPI 函数:
lineGetTranslateCaps
lineTranslateAddress
lineTranslateDialog
lineSetCurrentLocation
lineGetCountry
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"));
}
笔记 :
- 如果有 .net 兼容的 API,我建议使用官方 API。
- 不保证此代码可在 Win 7 以外的其他操作系统上运行
- 如果您需要提示用户填写这些详细信息,您可以使用以下命令启动配置工具:
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 回答