我工作的设备有多种(大多数是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;
}
}
我不喜欢手册(即Fat Finger)序列号条目。是否有人要求查询设备的序列号,或者该供应商是否具体?
Datamax确实制作了一个特定于其设备的SDK,但我们不希望我们的应用程序绑定到任何一个制造商(我们已经被绑定到VS2008)。
答案 0 :(得分:3)
我首先尝试P / Invoke来获取设备ID(KerneIoControl
和IOCTL_HAL_GET_DEVICEID
)并查看它是否与您之后的序列号相匹配。 Here's an example
答案 1 :(得分:1)
我不知道您的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)
{
;
;
}