📄 common.pas
字号:
unit Common;
interface
Uses Windows,Registry,SysUtils;
const
CALL_INTERVAL_TIME=5; //查询时钟的触发间隔,5秒
ONE_SECOND=1.1574074074074074074074074E-5; //此浮点数在TDateTime类型中代表一秒钟
MAX_PLAN_NUM=300;
MAX_RECALL_NUM=100;
type
//用户登录类型,如果是管理员则有特殊权限
TLoginType=(ltManager,ltUser);
//处理表项时,标明当前是添加还是修改,在出入寓登记时尤其有用
TEditType=(etAdd,etModify);
//呼叫队列状态
TCallState=(csReady,csWaitFirst,csWaitSecond,csFirstDelayed,csSecondDelayed,csCalled,csCallImmediate);
//链路状态类型:待用,检测,人工呼叫,呼叫后监听、自动呼叫,电话录音,录音查询
TLinkState=(lsReady,lsDetect,lsManualCall,lsListenCall,lsAutoCall,lsRecord,lsReplay);
//呼叫队列记录类型
TCallRecord=Record
enabled:boolean;
time:TDateTime;
line:word;
state:TCallState;
CompanyName,StewardName,Room,Train:string;
TimeIn,TrainTime:TDateTime;
PlanFirstCall,PlanSecondCall:TDateTime;
ActualFirstCall,ActualSecondCall:TDateTime;
RecNo:integer;
//联叫房间
StickyRoom:array[0..10]of string[20];
StickyLine:array[0..10]of word;
StickyNum:integer;
//状态,以数字表示0--csReady,1--csWaitSecond,2--csCalled
nState:byte;
end;
//房间存在类型
TRoomExistType=array[0..255]of boolean;
//系统设置记录类型
TSysSet=Record
PortBase:word; //端口基地址
RoomBits:byte; //房号位数
PhoneLine1,PhoneLine2:byte; //电话录音端口1,2
CallInterval:word; //自动叫班一叫三催间隔,单位:分钟
MaxCallTime:word; //人工叫班最长时间,单位:分钟
MaxManualWaveNum:word; //人工录音叫班存放语音条数
MaxAutoWaveNum:word; //自动叫班存放语音条数
MaxPhoneWaveNum:word; //电话录音存放语音条数
AutoSavePhone1,AutoSavePhone2:boolean; //启动自动记录电话录音
WaveDir:string[255]; //叫班录音文件存放路径
TelephoneDir:string[255]; //电话录音文件存放路径
RecordBits:byte; //语音采样位数:8或16
RecordRate:longint; //录音波特率:11025 22050 44100
StationName:string[255]; //用户所在公司名称
AutoCallEnabled:boolean; //启动自动叫班
AutoReCallEnabled:boolean;//启动三催功能
end;
var
RootDir:TFileName;
SysSet:TSysSet;
FormatSettings:TFormatSettings;
Critical1:TRTLCriticalSection;
IsAddRecord:Boolean; //进入添加记录前置位
function GetWaveName(DateTime:TDateTime):TFileName;
function GetTelephoneWaveName(DateTime:TDateTime):TFileName;
function DeleteWaveFile(fname:TFileName):boolean;
//按算法将字符串进行转换,用于比较注册信息
function TransForm(RegistStr:string):string;
//获取系统分区的卷标序列号
function GetVolumeSerialNumber:Int64;
//获取注册表中的注册值
function GetRegistStr:string;
//判断字符串是否为空串
function IsEmptyString(str:string):Boolean;
implementation
function GetWaveName(DateTime:TDateTime):TFileName;
var str:string;
begin
FormatSettings.TimeSeparator:='_';
str:=DateTimeToStr(DateTime,FormatSettings)+'.wav';
Result:=SysSet.WaveDir+'\'+str;
end;
function GetTelephoneWaveName(DateTime:TDateTime):TFileName;
var str:string;
begin
FormatSettings.TimeSeparator:='_';
str:=DateTimeToStr(DateTime,FormatSettings)+'.wav';
Result:=SysSet.TelephoneDir+'\'+str;
end;
function DeleteWaveFile(fname:TFileName):boolean;
begin
try
Result:=DeleteFile(fname);
except
Result:=false;
end;
end;
function TransForm(RegistStr:string):string;
var str:string;
i,len:integer;
m:byte;
begin
len:=Length(RegistStr);
str:=RegistStr;
for i:=1 to len do begin
m:=(ord(str[i])+30) mod 115;
if(m<33) then
m:=m+33;
str[i]:=chr(m);
end;
Result:=str;
end;
function GetVolumeSerialNumber:Int64;
var
lpVolumeNameBuffer:array[0..200]of char;
lpFileSystemNameBuffer:array[0..200]of char;
nVolumeNameSize:integer;
lpVolumeSerialNumber:Cardinal;//PDWORD;
lpMaximumComponentLength,lpFileSystemFlags:Cardinal;
lnResult:longbool;
nFileSystemNameSize:Cardinal;
tmp:int64;
begin
nVolumeNameSize:= 200; // lpVolumeNameBuffer 的大小
lpVolumeSerialNumber:= 0; // lpVolumeSerialNumber 缓存
lpMaximumComponentLength := 200;
lpFileSystemFlags := 0;
nFileSystemNameSize := 200;
lpVolumeNameBuffer:=' ';
lpFileSystemNameBuffer:=' ';
lnResult := GetVolumeInformation(pchar('c:\'), @lpVolumeNameBuffer, //
nVolumeNameSize, @lpVolumeSerialNumber,
lpMaximumComponentLength, lpFileSystemFlags,
@lpFileSystemNameBuffer, nFileSystemNameSize);
if(lnResult) then
tmp:=int64(lpVolumeSerialNumber)
else
tmp:=0;
Result:=tmp;
end;
function GetRegistStr:string;
var
TheReg:TRegistry;
keyName,str:string;
begin
TheReg := TRegistry.Create;
TheReg.RootKey := HKEY_LOCAL_MACHINE;
keyName := 'SOFTWARE\AutoCall';
if TheReg.OpenKey(keyName, True) then
begin
str:=TheReg.readString('Regist');
TheReg.CloseKey;
end;
Thereg.Free;
Result:=str;
end;
function IsEmptyString(str:string):Boolean;
var len,i:integer;
begin
len:=length(str);
if(len=0) then
Result:=true
else begin
for i:=1 to len do
if(str[i]<>' ') then begin
Result:=false;
Exit;
end;
Result:=true;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -