Как определить серийный номер устройства Windows Mobile 5?(.NET CF 3.5) - PullRequest
0 голосов
/ 19 августа 2011

У нас есть несколько устройств, на которых я работаю (в основном Datalogic 4420 Falcon ), и кто-то всегда оставляет одно вне базы. Батарея разряжена, затем они возвращаются, чтобы начать настройку. (Должен быть способ настроить файл на SD-карте для перезагрузки при такой ошибке, но он не очень хорошо работает)

Когда кто-то сохраняет изменения на устройстве (используя мое приложение, которое записывает данные на SQL Server), вместе с ним отправляется серийный номер, чтобы мы могли отслеживать, какие устройства где используются.

У каждого устройства есть Serial Number, и я должен физически (то есть вручную) записать это в поле Device name, которое я могу прочитать. Рабочий код здесь, если кто-то хочет знать, как:

static string deviceId = null;

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

Мне не нравится ввод серийного номера вручную (т. Е. Склонен к полноте). Есть ли какой-нибудь вызов, чтобы запросить серийный номер устройства, или это зависит от поставщика?

Datamax делает SDK, который специфичен для их устройств, но мы не хотим, чтобы наши приложения были привязаны к какому-либо одному производителю (мы уже привязаны к VS2008).

enter image description here

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

Я бы начал с попытки P / Invoke получить идентификатор устройства (KerneIoControl с IOCTL_HAL_GET_DEVICEID) и посмотреть, соответствует ли он указанному вами серийному номеру. Вот пример .

1 голос
/ 23 августа 2011

Я не знаю о вашем устройстве Datalogic 4420 Falcon, но я работаю с Intermec CK30 & CK60, и у меня есть файл itc50.dll.Вот фрагмент:

[DllImport("itc50.dll")]public static extern int ITCGetSerialNumber(StringBuilder Snumber, int buffSize);

StringBuilder hwSN = new StringBuilder(12);

if (ITCGetSerialNumber(hwSN, hwSN.Capacity) >= 0)
{
    ;
    ;
}
...