gpt4 book ai didi

networking - 在 Compact Framework 中检测 'Network Cable Unplugged'

转载 作者:行者123 更新时间:2023-12-03 13:04:58 26 4
gpt4 key购买 nike

我已经浏览了所有 Stack Overflow 的答案搜索,但 Google 或 Bing 都没有向我展示任何爱。我需要知道网络电缆何时在 Windows CE 设备上连接或断开,最好是从 Compact Framework 应用程序。

最佳答案

我意识到我在这里回答我自己的问题,但这实际上是通过电子邮件提出的一个问题,我实际上花了很长时间找到答案,所以我将其发布在这里。

因此,对于如何检测这种情况的一般答案是,您必须通过 IOCTL 调用 NDIS 驱动程序并告诉它您对通知感兴趣。这是通过 IOCTL_NDISUIO_REQUEST_NOTIFICATION 完成的值(文档说这在 WinMo 中不受支持,但文档是错误的)。当然,接收通知并不是那么简单——你儿子不会只是得到一些不错的回调。相反,您必须启动 point to point message queue并将其发送到 IOCTL 调用,以及您想要的特定通知的掩码。然后,当某些事情发生变化(例如电缆被拉动)时,您将收到 NDISUIO_DEVICE_NOTIFICATION结构(再次 MSDN 错误地说这是仅 CE),然后您可以解析它以找到具有事件的适配器以及确切的事件是什么。

从托管代码的角度来看,这实际上需要编写大量代码 - CreateFile 以打开 NDIS、所有排队 API、通知结构等。幸运的是,我已经沿着这条路走下去并添加了它已经到智能设备框架。因此,如果您使用的是 SDF,则收到的通知如下所示:

public partial class TestForm : Form
{
public TestForm()
{
InitializeComponent();

this.Disposed += new EventHandler(TestForm_Disposed);

AdapterStatusMonitor.NDISMonitor.AdapterNotification +=
new AdapterNotificationEventHandler(NDISMonitor_AdapterNotification);
AdapterStatusMonitor.NDISMonitor.StartStatusMonitoring();
}

void TestForm_Disposed(object sender, EventArgs e)
{
AdapterStatusMonitor.NDISMonitor.StopStatusMonitoring();
}

void NDISMonitor_AdapterNotification(object sender,
AdapterNotificationArgs e)
{
string @event = string.Empty;

switch (e.NotificationType)
{
case NdisNotificationType.NdisMediaConnect:
@event = "Media Connected";
break;
case NdisNotificationType.NdisMediaDisconnect:
@event = "Media Disconnected";
break;
case NdisNotificationType.NdisResetStart:
@event = "Resetting";
break;
case NdisNotificationType.NdisResetEnd:
@event = "Done resetting";
break;
case NdisNotificationType.NdisUnbind:
@event = "Unbind";
break;
case NdisNotificationType.NdisBind:
@event = "Bind";
break;
default:
return;
}

if (this.InvokeRequired)
{
this.Invoke(new EventHandler(delegate
{
eventList.Items.Add(string.Format(
"Adapter '{0}' {1}", e.AdapterName, @event));
}));
}
else
{
eventList.Items.Add(string.Format(
"Adapter '{0}' {1}", e.AdapterName, @event));
}
}
}

关于networking - 在 Compact Framework 中检测 'Network Cable Unplugged',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1544445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com