3

我正在用 C# 为设备 MC9090G 开发,我试图在我的代码中知道设备是否有 RFID 来加载确定的驱动程序;我使用了 coredll.lib 库中的 SPI_GETOEMINFO 但这两个设备返回相同的模型:“MC9090G”,我怎么知道哪一个有 RFID?

4

3 回答 3

2

如果您想阅读制造商硬编码到您设备中的内容,您应该获得摩托罗拉的开发者工具

如果您想自行设置设备的序列号,可以使用“关于”框中的“设备名称”字段:进入“设置”(开始 > 设置),启动“关于”小程序,然后切换到“设备 ID ”屏幕。

截屏

从这里,您可以将默认值(Pocket_PC在上图中)替换为您设备的序列号……或者您想在其中写入的任何内容。

可以从注册表中读取该字段,如下所示:

using Microsoft.Win32.Registry;

private static string _deviceId = null;

public static string DeviceName {
  get {
    if (String.IsNullOrEmpty(_deviceId)) {
      using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Ident", true)) {
        try {
          _deviceId = (string)key.GetValue("Name", "[Unnamed]");
        } catch (Exception e) {
          ErrorWrapper("GetDeviceName", e);
          _deviceId = System.Net.Dns.GetHostName();
        } finally {
          key.Flush();
          key.Close();
        }
      }
    }
    return _deviceId;
  }
}

请注意,这个特定的getter只会从注册表中读取一次,然后存储该值以供进一步使用。不过,可能没有必要,因为注册表读取设计得很快。

当然,如果您的员工忘记将移动设备放在充电器上并且它没电了,您将不得不重新输入它。

于 2013-01-16T21:53:13.697 回答
2

在寻找区分设备是否带有 RFID 的解决方案后,我使用 Symbol.RFID.dll 程序集创建了一个 RFID.Reader 实例:

Symbol.RFID.Reader info = new Symbol.RFID.Reader();

因此,当设备没有 RFID 时,此行会抛出 System.Exception 'exception';所以我正在处理这个异常,以便对没有 RFID 的设备做我想做的事。

我知道这个 try catch 不是最好的解决方案,但它对我有用。

谢谢大家的回答。

于 2013-01-21T16:36:11.470 回答
1

如果您下载Motorola EMDK,在 Symbol.ResourceCoordination.dll 程序集的 Symbol.ResourceCoordination 命名空间中有一个名为 TerminalInfo 的类。创建该类的实例,然后读取 ESN 属性以获取设备的实际硬件序列号。

同一类还包含可用于确定已安装硬件的属性,尽管我自己没有使用过这些属性,也无法告诉你应该如何询问它们。

于 2013-01-17T14:28:54.977 回答