我们有几台我工作的设备(主要是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确实制作了专门针对他们设备的软件开发工具包,但我们不希望我们的应用程序与任何一家制造商捆绑在一起(我们已经与VS2008捆绑在一起)。

发布于 2011-08-24 00:32:30
我首先尝试使用P/Invoke来获取设备ID (带有IOCTL_HAL_GET_DEVICEID的KerneIoControl),并查看它是否与您想要的序列号相匹配。Here's an example。
发布于 2011-08-23 22:44:09
我不知道你的Datalogic4420 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)
{
;
;
}https://stackoverflow.com/questions/7125867
复制相似问题