📄 uservermain.pas
字号:
unit uServerMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, WinSkinData, ExtCtrls, ComCtrls, StdCtrls, Grids, RzGrids,
IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,
fcTreeView, OleCtrls,ScktComp,IdSocketHandle,ShellAPI,MMSystem,
SKYPE4COMLib_TLB, unaVCIDE, CnClasses, CnTimer, CnIP, CnPing, CnUDP;
const
//BUFF
CST_MAXBUFF=10240;
CST_CALLHEAD='+990086680830';//'+990086680830';
type
TfrmMain = class(TForm)
SkinData1: TSkinData;
grp1: TGroupBox;
stat1: TStatusBar;
grp2: TGroupBox;
spl1: TSplitter;
pgc1: TPageControl;
ts1: TTabSheet;
strngrdAll: TStringGrid;
idpclntMain: TIdUDPClient;
idpsrvrMain: TIdUDPServer;
idpclntUsers: TIdUDPClient;
idpsrvrUsers: TIdUDPServer;
ts2: TTabSheet;
fcTreeView1: TfcTreeView;
WaveIn1: TunavclWaveInDevice;
WaveCodeR1: TunavclWaveCodecDevice;
WaveOutStream1: TunavclIPOutStream;
WaveInStream1: TunavclIPInStream;
WaveCodeP1: TunavclWaveCodecDevice;
WaveOut1: TunavclWaveOutDevice;
ts3: TTabSheet;
grp3: TGroupBox;
lbl9: TLabel;
cbbRateType: TComboBox;
lbl10: TLabel;
lbl11: TLabel;
skyp1: TSkype;
cbbStreamType: TComboBox;
cbbTransType: TComboBox;
lbl14: TLabel;
edtSoundDevNum: TEdit;
lbl15: TLabel;
lbl16: TLabel;
edtLocalWordPort: TEdit;
edtRemoteWordPort: TEdit;
ts4: TTabSheet;
strngrdStream: TStringGrid;
btnSound: TButton;
lbl17: TLabel;
cbbStreamModel: TComboBox;
ctlMain: TCnTimerList;
ts5: TTabSheet;
grp5: TGroupBox;
grp6: TGroupBox;
lbl18: TLabel;
edtUserName1: TEdit;
edtPassWord1: TEdit;
lbl19: TLabel;
rbGN1: TRadioButton;
rbGJ1: TRadioButton;
grp7: TGroupBox;
lbl20: TLabel;
lbl21: TLabel;
edtUserName2: TEdit;
edtPassWord2: TEdit;
rbGN2: TRadioButton;
rbGJ2: TRadioButton;
grp8: TGroupBox;
lbl22: TLabel;
lbl23: TLabel;
edtUserName3: TEdit;
edtPassWord3: TEdit;
rbGN3: TRadioButton;
rbGJ3: TRadioButton;
grp9: TGroupBox;
lbl24: TLabel;
lbl25: TLabel;
edtUserName4: TEdit;
edtPassWord4: TEdit;
rbGN4: TRadioButton;
rbGJ4: TRadioButton;
chkSkype1: TCheckBox;
chkSkype2: TCheckBox;
chkSkype3: TCheckBox;
chkSkype4: TCheckBox;
btnSave: TButton;
idpclntLst: TIdUDPClient;
grp10: TGroupBox;
lbl32: TLabel;
edtLstServer: TEdit;
lbl33: TLabel;
edtLstServerPort: TEdit;
btnSetup: TButton;
fctrvwMain: TfcTreeView;
lbl34: TLabel;
cbb1: TComboBox;
lbl35: TLabel;
cbb2: TComboBox;
lbl36: TLabel;
edt1: TEdit;
edt2: TEdit;
lbl37: TLabel;
procedure FormCreate(Sender: TObject);
procedure idpsrvrMainUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure skyp1CallStatus(ASender: TObject; const pCall: ICall;
Status: TOleEnum);
procedure skyp2CallStatus(ASender: TObject; const pCall: ICall;
Status: TOleEnum);
procedure skyp3CallStatus(ASender: TObject; const pCall: ICall;
Status: TOleEnum);
procedure skyp4CallStatus(ASender: TObject; const pCall: ICall;
Status: TOleEnum);
procedure idpsrvrUsersUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
procedure btnSoundClick(Sender: TObject);
procedure ctlMainItems0Timer(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure btnSetupClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TSkypeObject=record
//当前状态
Status:TCallStatus;
//拨叫接口 (可控制Skype状态)
CtrlStatus:ICall;
//本地电话端口
gsLocalPhonePort:string;
//远程电话端口
gsRemotePhonePort:string;
//拨叫的电话号码
csCurrentCallNumber:String;
//当前用户IP地址
csCurrentUserIP:String;
//当前会话编号
csCurrentSessionID:String;
//开始会话时间
csBeginTime:String;
//结束会话时间
csEndTime:String;
//当前计算机名
csCurrentComputerName:String;
//当前状态。
csCurrentStatus:string;
//Skype用户帐号
csSkypeUserName:String;
//Skype用户密码
csSkypePassWord:String;
//Skype帐号类型
csSkypeType:integer;
//回放设备索引
csDevicePlayBack:Integer;
//录音设备索引
csDeviceRecord:Integer;
//是否启用
csSkypeUse:boolean;
end;
var
frmMain: TfrmMain;
gsLocalIP,gsLocalWordPort,
gsRemoteWordPort,gsLocalUserPort,
gsRemoteUserPort:String;
iTCount:integer;
aSkype:array [1..8] of TSkypeObject;
gsRateType,gsTransType,gsStreamType,gsStreamModel:String;
gsServerListHost,gsServerListPort:String;
implementation
uses uCommon,unaUtils,unavcIdeUtils,unaVclUtils;
{$R *.dfm}
procedure TfrmMain.FormCreate(Sender: TObject);
var
Hand:integer;
iApp:IApplication;
begin
{
//默认的创建四个用户
try
//创建第一个用户
WinExec('net user sutmpSkype1 sutmpSkype1 /add',SW_HIDE);
//创建第二个用户
WinExec('net user sutmpSkype2 sutmpSkype2 /add',SW_HIDE);
//创建第三个用户
WinExec('net user sutmpSkype3 sutmpSkype3 /add',SW_HIDE);
//创建第四个用户
WinExec('net user sutmpSkype4 sutmpSkype4 /add',SW_HIDE);
except
end; }
Hand:=FindWindow(nil,'c:\winnt\system32\cmd.exe');//找CMD句柄
if Hand<>0 then//如果找到句
begin
SendMessage(Hand,WM_CLOSE,0,0);//关闭隐藏的CMD窗口
end else begin
Hand:=FindWindow(nil,'c:\windows\system32\cmd.exe');//找CMD句柄
if Hand<>0 then
begin
SendMessage(Hand,WM_CLOSE,0,0);//关闭隐藏的CMD窗口
end;
end;
//枚举回放设备
enumWaveDevices(cbbRC1,false,false);
//枚举录音设备
enumWaveDevices(cbbPB1,True,false);
//枚举回放设备
enumWaveDevices(cbbRC2,false,false);
//枚举录音设备
enumWaveDevices(cbbPB2,True,false);
//枚举回放设备
enumWaveDevices(cbbRC3,false,false);
//枚举录音设备
enumWaveDevices(cbbPB3,True,false);
//枚举回放设备
enumWaveDevices(cbbRC4,false,false);
//枚举录音设备
enumWaveDevices(cbbPB4,True,false);
//传输方式
cbbTransType.ItemIndex:=0;
//流模式
cbbStreamType.ItemIndex:=5;
//采样率
cbbRateType.ItemIndex:=1;
if FileExists(gcf_GetAppPath+ 'Kernel.dat') then
begin
gsLocalWordPort:=gcf_GetINIValue('SERVERNETWORK','LOCALWORDPORT');
edtLocalWordPort.Text:=gsLocalWordPort;
gsRemoteWordPort:=gcf_GetINIValue('SERVERNETWORK','REMOTEWORDPORT');
gsLocalUserPort:=gcf_GetINIValue('SERVERNETWORK','LOCALUSERPORT');
gsRemoteUserPort:=gcf_GetINIValue('SERVERNETWORK','REMOTEUSERPORT');
gsServerListHost:=gcf_GetINIValue('SERVERNETWORK','SERVERLSTHOST');
edtLstServer.Text:=gsServerListHost;
gsServerListPort:=gcf_GetINIValue('SERVERNETWORK','SERVERLSTPORT');
edtLstServerPort.Text:=gsServerListPort;
edtRemoteWordPort.Text:=gsRemoteWordPort;
//声卡数量
edtSoundDevNum.Text:=gcf_GetINIValue('SERVERSOUNDCARD','NUMBER');
//skype1 设置
aSkype[1].gsLocalPhonePort:=gcf_GetINIValue('SERVERNETWORK','LOCALPHONEPORT1');
edtLocPort1.Text:=aSkype[1].gsLocalPhonePort;
aSkype[1].gsRemotePhonePort:=gcf_GetINIValue('SERVERNETWORK','REMOTEPHONEPORT1');
edtRmtPort1.Text:=aSkype[1].gsRemotePhonePort;
cbbPB1.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','PB1'),-1);
aSkype[1].csDevicePlayBack:=cbbPB1.ItemIndex;
cbbRC1.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','RC1'),-1);
aSkype[1].csDeviceRecord:=cbbRC1.ItemIndex;
edtUserName1.Text:=gcf_GetINIValue('Skype','UserName1');
edtPassWord1.Text:=gcf_GetINIValue('Skype','PassWord1');
chkSkype1.Checked:=StrToBoolDef(gcf_GetINIValue('Skype','UseSkype1'),False);
if StrToIntDef(gcf_GetINIValue('Skype','UserType1'),0)=0 then
begin
rbGN1.Checked:=True;
rbGJ1.Checked:=False;
end else begin
rbGN1.Checked:=False;
rbGJ1.Checked:=True;
end;
aSkype[1].csSkypeUserName:=edtUserName1.Text;
aSkype[1].csSkypePassWord:=edtPassWord1.Text;
aSkype[1].csSkypeType:=StrToIntDef(gcf_GetINIValue('Skype','UserType1'),0);
aSkype[1].csSkypeUse:=chkSkype1.Checked;
gcp_GetComputerInfo;
idpclntLst.Active:=False;
idpclntLst.Host:=gsServerListHost;
idpclntLst.Port:=StrToIntDef(gsServerListPort,0);
idpclntLst.Active:=True;
idpclntLst.Send(DEF_BSEPCHAR + gComputerAddr +
DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
gComputerName +
DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
'登录' + DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
gsLocalWordPort + DEF_ESEPCHAR);
{
//skype2 设置
aSkype[2].gsLocalPhonePort:=gcf_GetINIValue('SERVERNETWORK','LOCALPHONEPORT2');
edtLocPort2.Text:=aSkype[2].gsLocalPhonePort;
aSkype[2].gsRemotePhonePort:=gcf_GetINIValue('SERVERNETWORK','REMOTEPHONEPORT2');
edtRmtPort2.Text:=aSkype[2].gsRemotePhonePort;
cbbPB2.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','PB2'),-1);
aSkype[2].csDevicePlayBack:=cbbPB2.ItemIndex;
cbbRC2.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','RC2'),-1);
aSkype[2].csDeviceRecord:=cbbRC2.ItemIndex;
edtUserName2.Text:=gcf_GetINIValue('Skype','UserName2');
edtPassWord2.Text:=gcf_GetINIValue('Skype','PassWord2');
chkSkype2.Checked:=StrToBoolDef(gcf_GetINIValue('Skype','UseSkype2'),False);
if StrToIntDef(gcf_GetINIValue('Skype','UserType2'),0)=0 then
begin
rbGN2.Checked:=True;
rbGJ2.Checked:=False;
end else begin
rbGN2.Checked:=False;
rbGJ2.Checked:=True;
end;
aSkype[2].csSkypeUserName:=edtUserName2.Text;
aSkype[2].csSkypePassWord:=edtPassWord2.Text;
aSkype[2].csSkypeType:=StrToIntDef(gcf_GetINIValue('Skype','UserType2'),0);
aSkype[2].csSkypeUse:=chkSkype2.Checked;
//skype3 设置
aSkype[3].gsLocalPhonePort:=gcf_GetINIValue('SERVERNETWORK','LOCALPHONEPORT3');
edtLocPort3.Text:=aSkype[3].gsLocalPhonePort;
aSkype[3].gsRemotePhonePort:=gcf_GetINIValue('SERVERNETWORK','REMOTEPHONEPORT3');
edtRmtPort3.Text:=aSkype[3].gsRemotePhonePort;
cbbPB3.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','PB3'),-1);
aSkype[3].csDevicePlayBack:=cbbPB3.ItemIndex;
cbbRC3.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','RC3'),-1);
aSkype[3].csDeviceRecord:=cbbRC3.ItemIndex;
edtUserName3.Text:=gcf_GetINIValue('Skype','UserName3');
edtPassWord3.Text:=gcf_GetINIValue('Skype','PassWord3');
chkSkype3.Checked:=StrToBoolDef(gcf_GetINIValue('Skype','UseSkype3'),False);
if StrToIntDef(gcf_GetINIValue('Skype','UserType3'),0)=0 then
begin
rbGN3.Checked:=True;
rbGJ3.Checked:=False;
end else begin
rbGN3.Checked:=False;
rbGJ3.Checked:=True;
end;
aSkype[3].csSkypeUserName:=edtUserName3.Text;
aSkype[3].csSkypePassWord:=edtPassWord3.Text;
aSkype[3].csSkypeType:=StrToIntDef(gcf_GetINIValue('Skype','UserType3'),0);
aSkype[3].csSkypeUse:=chkSkype3.Checked;
//skype4 设置
aSkype[4].gsLocalPhonePort:=gcf_GetINIValue('SERVERNETWORK','LOCALPHONEPORT4');
edtLocPort4.Text:=aSkype[4].gsLocalPhonePort;
aSkype[4].gsRemotePhonePort:=gcf_GetINIValue('SERVERNETWORK','REMOTEPHONEPORT4');
edtRmtPort4.Text:=aSkype[4].gsRemotePhonePort;
cbbPB4.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','PB4'),-1);
aSkype[4].csDevicePlayBack:=cbbPB4.ItemIndex;
cbbRC4.ItemIndex:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','RC4'),-1);
aSkype[4].csDeviceRecord:=cbbRC4.ItemIndex;
edtUserName4.Text:=gcf_GetINIValue('Skype','UserName4');
edtPassWord4.Text:=gcf_GetINIValue('Skype','PassWord4');
chkSkype4.Checked:=StrToBoolDef(gcf_GetINIValue('Skype','UseSkype4'),False);
if StrToIntDef(gcf_GetINIValue('Skype','UserType4'),0)=0 then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -