海康威视SDK - 门禁admin用户密码设置
门禁/报警主机获取用户信息
方法及参数
-
调用方法:
NET_DVR_GetAlarmDeviceUser(userId, 1, ref NET_DVR_ALARM_DEVICE_USER);
//HCNetSDK中声明类 [DllImport(@"..\..\runtime\hk\HCNetSDK.dll")] public static extern bool NET_DVR_GetAlarmDeviceUser(int lUserID, int lUserIndex, ref NET_DVR_ALARM_DEVICE_USER lpDeviceUser);
参数 说明 lUserID 登录时返回的句柄 lUserIndex 门禁的起始码是1;报警主机的起始码是0。设置错误时,错误码会现实11. lpDeviceUser NET_DVR_ALARM_DEVICE_USER 类,返回配置信息 返回值 true为成功,false为失败 -
声明变量类:
NET_DVR_ALARM_DEVICE_USER
如果HCNetSDK.cs中不存在,需自己手动添加,添加时一定要参考HCNetSDK.h文件
[StructLayoutAttribute(LayoutKind.Sequential)] public struct NET_DVR_ALARM_DEVICE_USER { public Int64 dwSize; // 结构体大小 [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = NAME_LEN, ArraySubType = UnmanagedType.I1)] public byte[] sUserName; // 用户名 [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = PASSWD_LEN, ArraySubType = UnmanagedType.I1)] public byte[] sPassword; // 密码 NET_DVR_IPADDR struUserIP; /* 用户IP地址(为0时表示允许任何地址) */ [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 6, ArraySubType = UnmanagedType.I1)] public byte[] byMACAddr; /* 物理地址 */ public byte byUserType; // 0-普通用户(操作员) 1-管理员用户 2-安装员用户 3-制造商用户 public byte byAlarmOnRight; // 布防权限 public byte byAlarmOffRight; // 撤防权限 public byte byBypassRight; // 旁路权限 [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = MAX_RIGHT, ArraySubType = UnmanagedType.I1)] public byte[] byOtherRight; // 其他权限 // 0 -- 日志权限 // 1 -- 重启关机 // 2 -- 参数设置权限 // 3 -- 参数获取权限 // 4 -- 恢复默认参数权限 // 5 -- 警号输出权限 // 6 -- PTZ 控制权限 // 7 -- 远程升级权限 // 8 -- 远程预览 // 9 -- 远程手动录像 // 10 -- 远程回放 // 11 -- 消警 // 12 -- 强制布防 // 13 -- 永久旁路 // 14 -- 添加更改个人授权代码 // 15 -- 调试模式 [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)] public byte[] byNetPreviewRight; // 远程可以预览的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限 [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)] public byte[] byNetRecordRight; // 远程可以录像的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限 [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)] public byte[] byNetPlaybackRight; // 远程可以回放的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限 [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)] public byte[] byNetPTZRight; // 远程可以PTZ的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限 //BYTE byPriority; // 优先级,0xff-无,0--低,1--中,2--高 //无(表示不支持优先级的设置) //低(默认权限:包括远程回放,远程查看日志和状态,远程关机/重启) //中(包括远程控制云台,远程手动录像,远程回放,语音对讲和远程预览,本地备份,本地/远程关机/重启) //高(管理员) [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = PASSWD_LEN, ArraySubType = UnmanagedType.I1)] public byte[] sOriginalPassword; // 原始密码 [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = PASSWD_LEN, ArraySubType = UnmanagedType.I1)] public byte[] sKeypadPassword; // 键盘密码 public byte[] byUserEnabled; // 用户是否开启使用:0-无效,1-开启,2-不开启 [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 135, ArraySubType = UnmanagedType.I1)] public byte[] byRes2; // 保留字节 }
调用代码
uint error = 0;
// 声明NET_DVR_ALARM_DEVICE_USER变量
CHCNetSDK.NET_DVR_ALARM_DEVICE_USER alarmDeviceUser = new CHCNetSDK.NET_DVR_ALARM_DEVICE_USER();
// 调用获取配置信息方法
if(CHCNetSDK.NET_DVR_GetAlarmDeviceUser(userId, 1, ref alarmDeviceUser)){
//返回成功
}else{
//查看错误码
error = CHCNetSDK.NET_DVR_GetLastError();
}
门禁/报警主机设置密码
方法及参数
-
使用方法
-
CHCNetSDK.NET_DVR_GetAlarmDeviceUser
同上 -
NET_DVR_SetAlarmDeviceUser(userId, 1, ref alarmDeviceUser)
[DllImport(@"..\..\runtime\hk\HCNetSDK.dll")] public static extern bool NET_DVR_SetAlarmDeviceUser(int lUserID, int lUserIndex, ref NET_DVR_ALARM_DEVICE_USER lpDeviceUser);
参数 说明 lUserID 登录时返回的句柄 lUserIndex 门禁:admin默认为1
报警主机:默认从0开始lpDeviceUser 需要设置的用户参数 返回值 true为成功,false为失败
-
步骤:
通过NET_DVR_GetAlarmDeviceUser
方法获得用户参数后,将密码和原始密码分别赋值给sPassword和sOriginalPassword,然后调用NET_DVR_SetAlarmDeviceUser
方法即可。
注意:返回的sPassword参数为空,是无法获得到密码的
代码实现:
// 门禁设置密码
CHCNetSDK.NET_DVR_ALARM_DEVICE_USER alarmDeviceUser = new CHCNetSDK.NET_DVR_ALARM_DEVICE_USER();
// 调用获取配置信息方法
CHCNetSDK.NET_DVR_GetAlarmDeviceUser(userId, 1, ref alarmDeviceUser);
// 设置新密码
Encoding.UTF8.GetBytes("a7777777").CopyTo(alarmDeviceUser.sPassword, 0);
// 原始密码
Encoding.UTF8.GetBytes("a88888888").CopyTo(alarmDeviceUser.sOriginalPassword, 0);
bool b = CHCNetSDK.NET_DVR_SetAlarmDeviceUser(userId, 1, ref alarmDeviceUser);
uint error = CHCNetSDK.NET_DVR_GetLastError();
当出现错误码为11时,请注意是否为
struct
类型中设置的变量长度不对,例如sUserName的长度应设置为32,而自己设置成了64。具体数值请参考:SDK中头文件夹的
HCNetSDK.h
文件。