C# Windows Mobile设备是否可以在';船靠岸了吗?
我有一个应用程序,我需要知道它运行的windows mobile设备何时对接,有什么办法吗?当您可以解析PPP_对等机器名时,windows mobile设备将对接,该名称可用于设备与其对接的主机之间的TCP通信。然而,只有当支架实际连接到PC时,才是如此C# Windows Mobile设备是否可以在';船靠岸了吗?,c#,windows-mobile,dock,C#,Windows Mobile,Dock,我有一个应用程序,我需要知道它运行的windows mobile设备何时对接,有什么办法吗?当您可以解析PPP_对等机器名时,windows mobile设备将对接,该名称可用于设备与其对接的主机之间的TCP通信。然而,只有当支架实际连接到PC时,才是如此 public static bool ActiveSyncConnected { get { try { IPHostEntry entry = Dns.GetHost
public static bool ActiveSyncConnected
{
get
{
try
{
IPHostEntry entry = Dns.GetHostEntry("PPP_PEER");
return true;
}
catch
{
return false;
}
}
}
public static bool ActiveSyncConnected
{
get
{
try
{
IPHostEntry entry = Dns.GetHostEntry("PPP_PEER");
return true;
}
catch
{
return false;
}
}
}
另一个解决方案(至少对于工业设备)是检查交流线路状态,即它当前是否连接到电源适配器。当设备处于摇篮中时,无论是否连接到PC,都是如此
public bool CurrentlyConnectedToACLine
{
get
{
SYSTEM_POWER_STATUS_EX status = new SYSTEM_POWER_STATUS_EX();
if (GetSystemPowerStatusEx(status, true))
return status.ACLineStatus != 0;
else
return false;
}
}
[StructLayout(LayoutKind.Sequential)]
internal class SYSTEM_POWER_STATUS_EX
{
public byte ACLineStatus = 0;
public byte BatteryFlag = 0;
public byte BatteryLifePercent = 0;
public byte Reserved1 = 0;
public uint BatteryLifeTime = 0;
public uint BatteryFullLifeTime = 0;
public byte Reserved2 = 0;
public byte BackupBatteryFlag = 0;
public byte BackupBatteryLifePercent = 0;
public byte Reserved3 = 0;
public uint BackupBatteryLifeTime = 0;
public uint BackupBatteryFullLifeTime = 0;
}
[DllImport("coredll.dll")]
private static extern bool GetSystemPowerStatusEx(SYSTEM_POWER_STATUS_EX lpSystemPowerStatus, bool fUpdate);
当您可以解析PPP_对等计算机名称时,Windows Mobile设备将被停靠,该名称可用于设备与其停靠的主机之间的TCP通信。然而,只有当支架实际连接到PC时,才是如此
public static bool ActiveSyncConnected
{
get
{
try
{
IPHostEntry entry = Dns.GetHostEntry("PPP_PEER");
return true;
}
catch
{
return false;
}
}
}
public static bool ActiveSyncConnected
{
get
{
try
{
IPHostEntry entry = Dns.GetHostEntry("PPP_PEER");
return true;
}
catch
{
return false;
}
}
}
另一个解决方案(至少对于工业设备)是检查交流线路状态,即它当前是否连接到电源适配器。当设备处于摇篮中时,无论是否连接到PC,都是如此
public bool CurrentlyConnectedToACLine
{
get
{
SYSTEM_POWER_STATUS_EX status = new SYSTEM_POWER_STATUS_EX();
if (GetSystemPowerStatusEx(status, true))
return status.ACLineStatus != 0;
else
return false;
}
}
[StructLayout(LayoutKind.Sequential)]
internal class SYSTEM_POWER_STATUS_EX
{
public byte ACLineStatus = 0;
public byte BatteryFlag = 0;
public byte BatteryLifePercent = 0;
public byte Reserved1 = 0;
public uint BatteryLifeTime = 0;
public uint BatteryFullLifeTime = 0;
public byte Reserved2 = 0;
public byte BackupBatteryFlag = 0;
public byte BackupBatteryLifePercent = 0;
public byte Reserved3 = 0;
public uint BackupBatteryLifeTime = 0;
public uint BackupBatteryFullLifeTime = 0;
}
[DllImport("coredll.dll")]
private static extern bool GetSystemPowerStatusEx(SYSTEM_POWER_STATUS_EX lpSystemPowerStatus, bool fUpdate);
除了Thorsten的建议之外,您还可以查找
通知\u事件\u RS232\u检测到的通知。事件名称是从USB很少见的时候遗留下来的,所以忽略一个事实,它说RS232,即使使用USB,也会发生RS232事件
您可以使用CeRunAppAtEvent
挂接通知。同样,忽略API名称的含义-您也可以使用它设置一个系统事件,您可以在该事件上等待SingleObject
有关详细信息和实施。除了Thorsten的建议外,您还可以查找通知\u事件\u RS232\u检测到的通知。事件名称是从USB很少见的时候遗留下来的,所以忽略一个事实,它说RS232,即使使用USB,也会发生RS232事件
您可以使用CeRunAppAtEvent
挂接通知。同样,忽略API名称的含义-您也可以使用它设置一个系统事件,您可以在该事件上等待SingleObject
以上所有答案都是正确的,但使用不同的方法。问题是,为什么你的应用程序需要知道设备是否对接
如果使用PC ActiveSync Paasthru TCP/IP连接,则最好使用PPP_对等解决方案
如果您只需要知道,如果设备是外部供电的,那么最好使用PowerstatusEx和AC_线。这也可以通过电源通知队列使用,这样应用程序就不需要轮询状态(另请参见通知事件RS232检测方法)
如果您只需要知道设备已被吊篮,则最好采用通知事件RS232检测方法。例如,如果您有一个车辆停靠点,并且希望开始与连接到停靠点的车辆黑盒通信
你看,虽然所有的解决方案乍一看都差不多,但它们有不同的意图。以上所有答案都是正确的,但使用的方法不同。问题是,为什么你的应用程序需要知道设备是否对接
如果使用PC ActiveSync Paasthru TCP/IP连接,则最好使用PPP_对等解决方案
如果您只需要知道,如果设备是外部供电的,那么最好使用PowerstatusEx和AC_线。这也可以通过电源通知队列使用,这样应用程序就不需要轮询状态(另请参见通知事件RS232检测方法)
如果您只需要知道设备已被吊篮,则最好采用通知事件RS232检测方法。例如,如果您有一个车辆停靠点,并且希望开始与连接到停靠点的车辆黑盒通信
你看,虽然所有的解决方案乍一看都差不多,但它们有不同的意图。可能重复吗@nk2003dec:不,这个问题是关于从PC端检测它,这个问题是关于从设备端检测它。可能是重复的吗@nk2003dec:不,这个问题是关于从PC端检测它,这个问题是关于从设备端检测它。使用ppp_peer假设您在PC上运行ActiveSync/WMDC。设备不会启动TCP/IP连接。是的,这通常是在使用WM/WCE设备时的情况。设备本身不会创建TCP连接,但如果您想与ActiveSync主机通信,PPP_PEER是您可以使用的计算机名称。Downvoter,是否要说明为什么您会对完全有效的答案进行Downvoter?使用PPP_PEER假设您在PC上运行ActiveSync/WMDC。设备不会启动TCP/IP连接。是,使用WM/WCE设备时通常会出现这种情况。设备本身不会创建TCP连接,但如果您想与ActiveSync主机通信,PPP_PEER是您可以使用的机器名。Downvoter,是否要评论一下您为什么对完全有效的答案进行Downvoter?