.net 检测计算机是否在Windows上使用移动连接(3G/EDGE/GPRS)

.net 检测计算机是否在Windows上使用移动连接(3G/EDGE/GPRS),.net,windows,winapi,connection,3g,.net,Windows,Winapi,Connection,3g,我需要确定计算机是否使用移动连接(如3G、EDGE、GPRS)连接到Internet。我发现了,但被接受的答案对我没有多大帮助。。。System.Net.NetworkInformation.NetworkInterface类公开了一些属性,但无法帮助我确定它是否是移动连接 我的应用程序在.NET中,但我也对涉及Win32或WMI的解决方案感兴趣。我认为如果您查询活动设备的状态,它可能会起作用,因为如果它是移动宽带设备,它应该返回状态,否则我假设它将返回错误 本文有一个图表,显示了如何执行类似的

我需要确定计算机是否使用移动连接(如3G、EDGE、GPRS)连接到Internet。我发现了,但被接受的答案对我没有多大帮助。。。
System.Net.NetworkInformation.NetworkInterface
类公开了一些属性,但无法帮助我确定它是否是移动连接


我的应用程序在.NET中,但我也对涉及Win32或WMI的解决方案感兴趣。我认为如果您查询活动设备的状态,它可能会起作用,因为如果它是移动宽带设备,它应该返回状态,否则我假设它将返回错误

本文有一个图表,显示了如何执行类似的操作。引用该页:下图表示确定接口是否符合MB接口的条件以及收集设备功能信息所采取的过程

我自己从未尝试过,因此我对上述内容不确定,也无法显示任何示例代码,但这里有一个示例部分可能包含一些有用的内容:

编辑:旧新闻组中一个叫诺曼·戴蒙的人编写的代码片段


谢谢,看起来很有希望。尽管它看起来很复杂,但我不知道如何使用它…@托马斯:是的,正如我所说,不幸的是,我也从未使用过它。但是,我认为您可以使用
DeviceIoControl
()函数来执行实际的查询,因此可能值得查找相关信息。我将用我在旧新闻组帖子中找到的可能的代码片段更新我的答案,以防有所帮助。谢谢!你知道我如何获得设备句柄吗?@Thomas:我想这是
CreateFile
(),当我试图确认我在这里找到了一个带有完整代码示例的帖子时:虽然这个问题似乎是关于在XP上使用该代码的问题,所以不确定它有多好,但至少可能足以让你开始。问题是我不知道如何检索设备名。。。NetworkInterface类不提供该信息。在某些情况下,我可以使用WMI找到它,但不是所有3G调制解调器都可以
DWORD PhysicalMediumQuery = OID_GEN_PHYSICAL_MEDIUM;
NDIS_PHYSICAL_MEDIUM PhysicalMediumResult;
DWORD PhysicalMediumResultLength;
if (!DeviceIoControl(DeviceHandle, IOCTL_NDIS_QUERY_GLOBAL_STATS,
    &PhysicalMediumQuery, sizeof PhysicalMediumQuery,
    &PhysicalMediumResult, sizeof PhysicalMediumResult,
    &PhysicalMediumResultLength, NULL))
{ /* do error handling here */ }