Windows Mobile设备可以检测到它何时停靠?

时间:2012-12-07 06:50:40

标签: c# windows-mobile dock

我有一个应用程序,我需要知道它运行的Windows移动设备何时停靠,任何想法如何执行此操作?

3 个答案:

答案 0 :(得分:3)

除了Thorsten的建议,您还可以查找NOTIFICATION_EVENT_RS232_DETECTED通知。当USB很少见时,事件名称是遗留下来的,所以忽略它说RS232,即使使用USB,也会发生RS232事件。

您可以使用CeRunAppAtEvent挂钩通知。再次,忽略API的名称含义 - 您还可以使用它来设置可以使用WaitForSingleObject的系统事件。

See the answer to this question了解详情和实施情况。

答案 1 :(得分:2)

当您可以解析PPP_PEER计算机名称时,Windows Mobile设备已停靠,该计算机名称可用于设备与其停靠的主机之间的TCP通信。但是,只有在支架实际连接到PC时才会出现这种情况。

public static bool ActiveSyncConnected
{
    get
    {
        try
        {
            IPHostEntry entry = Dns.GetHostEntry("PPP_PEER");
            return true;
        }
        catch
        {
            return false;
        }
    }
}

另一种解决方案(至少对于工业设备)将检查AC线路状态,即它当前是否连接到电源适配器。无论是否连接到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);

答案 2 :(得分:1)

以上所有答案都是正确的,但使用不同的方法。问题是,为什么您的应用需要知道设备是否已停靠。

如果使用PC ActiveSync Paasthru TCP / IP连接,那么最好使用PPP_PEER解决方案。

如果您只需知道,如果设备是外部供电的,那么最好使用PowerstatusEx和AC_LINE。这也可以通过电源通知队列使用,这样应用程序就不需要轮询状态(另请参阅NOTIFICATION_EVENT_RS232_DETECTED方法)。

如果您只是需要知道设备已经安装好,那么NOTIFICATION_EVENT_RS232_DETECTED方法最好。例如,如果您有车辆停靠站并且想要开始与连接到停靠站的车辆黑盒通信。

你看,虽然所有解决方案一开始看起来大致相同,但它们有不同的意图。