本文来自于Thinkai’s Blog,thinkai也是我在ahk上面的引路人,对thinkai感兴趣的朋友请关注他的博客。
thinkai的博客简洁、有趣,即便是转载过来我也尽量保持作者原有的风格,主要是方便大家查阅。
首先从网上下载VaxSIPUserAgentOCX.ocx (版本7.0.4.8) 参见:http://www.pudn.com/Download/item/id/853476.html
然后执行:
regsvr32 /s VaxSIPUserAgentOCX.ocx
进行控件注册,注册后还需要有SIP账号,此版本控件经测试支持局域网拨打,互联网拨打NAT转换地址会有问题,服务器端显示离线。
Gui Add, ActiveX, x0 y0 w0 h0 vVaxSIPUserAgentOCX, {2935849A-3F6A-4DF8-8395-CF9AB3BE1835} Gui, Add, text, x0 y10 w20 h20, IP Gui, Add, Edit, x20 y10 w170 h20 vip, 192.168.1.2 Gui, Add, text, x200 y10 w30 h20, Port Gui, Add, Edit, x230 y10 w70 h20 vport, 5060 Gui, Add, Button, x300 y10 w100 h20 gconnect, 连接 Gui, Add, Button, x400 y10 w100 h20 gclose, 关闭 Gui, Add, Button, x500 y10 w100 h20 ganswer, 接听 Gui, Add, Button, x600 y10 w100 h20 ghangup, 挂断 Gui, Add, Button, x600 y10 w100 h20 greject, 拒接 Gui, Add, Edit, x0 y40 w100 h20 vphone, Gui, Add, Button, x100 y40 w100 h20 gcall, 拨打 Gui, Add, Button, x0 y70 w100 h20 gtransfer, 转接 Gui, Add, Button, x100 y70 w100 h20 ghold, 保持 Gui, Add, ListView, x0 y100 w800 h600 vlv, ID|Type|Msg gui, Show ComObjConnect(VaxSIPUserAgentOCX, VaxSIPUserAgentOCX_Events) LV_ModifyCol(2,100) LV_ModifyCol(3,1000) global id,lv,phone,VaxSIPUserAgentOCX id := 0 holded := false VaxSIPUserAgentOCX.SetLicenceKey("VAXVOIP.COM-191P238P55P253P97P229P51P76P-100.") ;设置LicenceKey ;MsgBox % VaxSIPUserAgentOCX.GetMyIP() ;MsgBox % VaxSIPUserAgentOCX.GetAudioInDevTotal() ;MsgBox % VaxSIPUserAgentOCX.GetAudioInDevName(0) return connect: Gui, Submit, NoHide MyIP := VaxSIPUserAgentOCX.GetMyIP() ;VARIANT_BOOL Initialize(VARIANT_BOOL BindToListenIP, BSTR ListenIP, long ListenPort, BSTR FromURI, BSTR SIPOutBoundProxy, BSTR SIPProxy, BSTR LoginId, BSTR LoginPwd, VARIANT_BOOL UseSoundDevice, long TotalLine); login := VaxSIPUserAgentOCX.Initialize(false,MyIP,5060,"1010<sip:1010@192.168.1.2>","","192.168.1.2","1001","password",True,1) VaxSIPUserAgentOCX.OpenLine(0, False, MyIP, 7000) ;打开1号通道 VaxSIPUserAgentOCX.RegisterToProxy(3600) ;注册间隔 VaxSIPUserAgentOCX.EnableKeepAlive(60) ;保活 MsgBox % (login=-1 ? "登录成功" : "登录失败:" GetErrorMessage()) "!" return hold: holded := !holded if holded VaxSIPUserAgentOCX.HoldLine(0) else VaxSIPUserAgentOCX.UnHoldLine(0) return transfer: GuiControlGet, phone VaxSIPUserAgentOCX.TransferCall(0,"sip:" phone "@192.168.1.2>") return reject: GuiControlGet, phone VaxSIPUserAgentOCX.RejectCall("CLI:" phone) return answer: GuiControlGet, phone VaxSIPUserAgentOCX.AcceptCall(0, "CLI:" phone, 0, 0) return hangup: VaxSIPUserAgentOCX.Disconnect(0) return call: GuiControlGet, phone MsgBox % VaxSIPUserAgentOCX.Connect(0,"sip:" phone "@192.168.1.2>",0,0) return class VaxSIPUserAgentOCX_Events { OnIncomingDiagnostic(MsgSIP,FromIP,FromPort) { ;id++,LV_Add("",id,"OnIncomingDiagnostic:" FromIP,MsgSIP) //调试SIP消息 消息太多不作显示 } OnOutgoingDiagnostic(MsgSIP,ToIP,ToPort) { ;id++,LV_Add("",id,"OnIncomingDiagnostic:" ToIP,MsgSIP) } OnTryingToReRegister() { id++,LV_Add("",id,"OnTryingToReRegister") } OnSuccessToReRegister() { id++,LV_Add("",id,"OnTryingToReRegister") } OnFailToRegister() { id++,LV_Add("",id,"OnFailToRegister") } OnFailToReRegister() { id++,LV_Add("",id,"OnFailToReRegister") } OnIncomingCall(CallId,DisplayName,UserName,FromURI,ToURI) ;来电 { id++,LV_Add("",id,"OnIncomingCall", CallId) GuiControl, , phone, % CallId SoundBeep, , 500 } OnDisconnectCall(LineNo) { id++,LV_Add("",id,"OnDisconnectCall", LineNo) } } GuiClose: close: VaxSIPUserAgentOCX.UnInitialize() ExitApp GetErrorMessage() { ErrNo = VaxSIPUserAgentOCX.GetVaxObjectError() if(ErrNo = 10) return "You are not Online, please click the 'Online' button first." if(ErrNo = 11) return "Cann't open local communication port. Another softphone (x-Ten, x-lite or skype etc) is already running. Please close it first." if(ErrNo = 12) return "License Key is not valid." if(ErrNo = 13) return "Fail to initialize VaxVoIP task window." if(ErrNo = 14) return "Cann't access Input/Mic device or device is already in use." if(ErrNo = 15) return "Cann't access Output/Speaker device or device is already in use." if(ErrNo = 16) return "Input/Mic device is not open." if(ErrNo = 17) return "Output/Speaker device is not open." if(ErrNo = 18) return "Your sound device does not support mic volume." if(ErrNo = 19) return "Your sound device does not support speaker volume." if(ErrNo = 20) return "Recording media initialization fail." if(ErrNo = 21) return "Cann't open the wave file." if(ErrNo = 22) return "Provided SIP URI is not valid." if(ErrNo = 23) return "Codec is not supported." if(ErrNo = 24) return "Error to create SDP (Session Description Protocol) request." if(ErrNo = 25) return "Error to create CONNECTION request. Please check the provided SIP URI is valid." if(ErrNo = 26) return "Error to create REGISTER request. Please check the provided SIP URI is valid." if(ErrNo = 27) return "Error to create UN-REGISTER request. Please check the provided SIP URI is valid." if(ErrNo = 28) return "Error to create DISCONNECT request." if(ErrNo = 29) return "Line No is not valid." if(ErrNo = 30) return "Line is already busy." if(ErrNo = 31) return "Line is not open." if(ErrNo = 32) return "Invalid Call-Id." if(ErrNo = 33) return "Provided value is not valid." if(ErrNo = 34) return "Selected line is not in voice session." if(ErrNo = 35) return "Fail to read wave file." if(ErrNo = 36) return "Fail to write wave file." if(ErrNo = 37) return "Unsupported wave file format." }
以下是该库的接口定义:
// Generated .IDL file (by the OLE/COM Object Viewer) // // typelib filename: VaxSIPUserAgentOCX.ocx [ uuid(148188FB-A6D9-48BC-AE37-65786376CD8E), version(1.0), helpstring("VaxSIPUserAgentOCX ActiveX Control module"), helpfile("VaxSIPUserAgentOCX.hlp"), helpcontext(00000000), custom(DE77BA64-517C-11D1-A2DA-0000F8773CE9, 83951780), custom(DE77BA63-517C-11D1-A2DA-0000F8773CE9, 1246968603) ] library VAXSIPUSERAGENTOCXLib { // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046} importlib("stdole2.tlb"); // Forward declare all types defined in this typelib dispinterface _DVaxSIPUserAgentOCX; dispinterface _DVaxSIPUserAgentOCXEvents; [ uuid(9858F01E-3474-40B6-996B-7867195B6A6C), helpstring("Dispatch interface for VaxSIPUserAgentOCX Control"), hidden ] dispinterface _DVaxSIPUserAgentOCX { properties: methods: [id(0x00000001)] void UnInitialize(); [id(0x00000002)] VARIANT_BOOL SetLicenceKey(BSTR LicenceKey); [id(0x00000003)] long GetVaxObjectError(); [id(0x00000004)] VARIANT_BOOL CloseLine(long LineNo); [id(0x00000005)] VARIANT_BOOL Connect( long LineNo, BSTR ToURI, long InputDeviceId, long OutputDeviceId); [id(0x00000006)] VARIANT_BOOL Disconnect(long LineNo); [id(0x00000007)] VARIANT_BOOL AcceptCall( long LineNo, BSTR CallId, long InputDeviceId, long OutputDeviceId); [id(0x00000008)] VARIANT_BOOL RejectCall(BSTR CallId); [id(0x00000009)] VARIANT_BOOL TransferCall( long LineNo, BSTR ToURI); [id(0x0000000a)] VARIANT_BOOL HoldLine(long LineNo); [id(0x0000000b)] VARIANT_BOOL UnHoldLine(long LineNo); [id(0x0000000c)] VARIANT_BOOL RegisterToProxy(long Expire); [id(0x0000000d)] VARIANT_BOOL UnRegisterToProxy(); [id(0x0000000e)] VARIANT_BOOL IsLineOpen(long LineNo); [id(0x0000000f)] VARIANT_BOOL IsLineHold(long LineNo); [id(0x00000010)] VARIANT_BOOL IsLineBusy(long LineNo); [id(0x00000011)] VARIANT_BOOL EnableKeepAlive(long Seconds); [id(0x00000012)] void DisableKeepAlive(); [id(0x00000013)] void DeselectAllVoiceCodec(); [id(0x00000014)] void SelectAllVoiceCodec(); [id(0x00000015)] VARIANT_BOOL SelectVoiceCodec(long CodecNo); [id(0x00000016)] VARIANT_BOOL DeselectVoiceCodec(long CodecNo); [id(0x00000017)] BSTR GetMyIP(); [id(0x00000018)] VARIANT_BOOL DigitDTMF( long LineNo, BSTR Digit); [id(0x00000019)] VARIANT_BOOL MuteMic(VARIANT_BOOL Mute); [id(0x0000001a)] VARIANT_BOOL MuteSpk(VARIANT_BOOL Mute); [id(0x0000001b)] long GetMicVolume(); [id(0x0000001c)] VARIANT_BOOL SetMicVolume(long Volume); [id(0x0000001d)] long GetSpkVolume(); [id(0x0000001e)] VARIANT_BOOL SetSpkVolume(long Volume); [id(0x0000001f)] VARIANT_BOOL EnableMicBoost(); [id(0x00000020)] VARIANT_BOOL DisableMicBoost(); [id(0x00000021)] VARIANT_BOOL IsMicBoostEnable(); [id(0x00000022)] VARIANT_BOOL EnableAGC(long Level); [id(0x00000023)] VARIANT_BOOL DisableAGC(); [id(0x00000024)] VARIANT_BOOL EnableEchoNoiseCancellation(); [id(0x00000025)] VARIANT_BOOL DisableEchoNoiseCancellation(); [id(0x00000026)] VARIANT_BOOL IsRecording(long LineNo); [id(0x00000027)] VARIANT_BOOL StopRecording(long LineNo); [id(0x00000028)] VARIANT_BOOL ResetRecording(long LineNo); [id(0x00000029)] VARIANT_BOOL SaveRecordingToWaveFile( long LineNo, BSTR FileName); [id(0x0000002a)] VARIANT_BOOL IsWaveFilePlaying(long LineNo); [id(0x0000002b)] VARIANT_BOOL PlayWaveOpen( long LineNo, BSTR FileName); [id(0x0000002c)] VARIANT_BOOL PlayWaveSkipTo( long LineNo, long Seconds); [id(0x0000002d)] long PlayWaveTotalTime(long LineNo); [id(0x0000002e)] VARIANT_BOOL PlayWavePause(long LineNo); [id(0x0000002f)] VARIANT_BOOL PlayWaveStart( long LineNo, VARIANT_BOOL Listen); [id(0x00000030)] VARIANT_BOOL PlayWaveStop(long LineNo); [id(0x00000031)] long PlayWavePosition(long LineNo); [id(0x00000032)] void EnableDonotDisturb(); [id(0x00000033)] void DisableDonotDisturb(); [id(0x00000034)] VARIANT_BOOL SetTOS( long LineNo, long Value); [id(0x00000035)] long GetTOS(long LineNo); [id(0x00000036)] VARIANT_BOOL EnableForceInbandDTMF(long LineNo); [id(0x00000037)] VARIANT_BOOL DisableForceInbandDTMF(long LineNo); [id(0x00000038)] VARIANT_BOOL SetDTMFVolume(long Volume); [id(0x00000039)] long GetDTMFVolume(); [id(0x0000003a)] VARIANT_BOOL Initialize( VARIANT_BOOL BindToListenIP, BSTR ListenIP, long ListenPort, BSTR FromURI, BSTR SIPOutBoundProxy, BSTR SIPProxy, BSTR LoginId, BSTR LoginPwd, VARIANT_BOOL UseSoundDevice, long TotalLine); [id(0x0000003b)] VARIANT_BOOL StartRecording( long LineNo, long RecordVoice, VARIANT_BOOL RecordCompress); [id(0x0000003c)] long GetMicSoundLevel(); [id(0x0000003d)] long GetSpkSoundLevel(); [id(0x0000003e)] long GetOutboundCodec(long LineNo); [id(0x0000003f)] long GetInboundCodec(long LineNo); [id(0x00000040)] VARIANT_BOOL OpenLine( long LineNo, VARIANT_BOOL BindToRTPRxIP, BSTR RTPRxIP, long RTPRxPort); [id(0x00000041)] long GetAudioInDevTotal(); [id(0x00000042)] long GetAudioOutDevTotal(); [id(0x00000043)] BSTR GetAudioOutDevName(long DeviceId); [id(0x00000044)] BSTR GetAudioInDevName(long DeviceId); [id(0x00000045)] BSTR GetVersionSDK(); [id(0x00000046)] BSTR GetVersionFile(); [id(0x00000047)] VARIANT_BOOL JoinTwoLine( long LineNoA, long LineNoB); }; [ uuid(747FAA95-5D00-4EA1-9F1F-035D2A88FDA4), helpstring("Event interface for VaxSIPUserAgentOCX Control") ] dispinterface _DVaxSIPUserAgentOCXEvents { properties: methods: [id(0x00000001)] void OnIncomingDiagnostic( BSTR MsgSIP, BSTR FromIP, long FromPort); [id(0x00000002)] void OnOutgoingDiagnostic( BSTR MsgSIP, BSTR ToIP, long ToPort); [id(0x00000003)] void OnDTMFDigit( long LineNo, BSTR Digit); [id(0x00000004)] void OnPlayWaveDone(long LineNo); [id(0x00000005)] void OnMsgNOTIFY(BSTR Msg); [id(0x00000006)] void OnTryingToUnRegister(); [id(0x00000007)] void OnFailToUnRegister(); [id(0x00000008)] void OnSuccessToUnRegister(); [id(0x00000009)] void OnTryingToRegister(); [id(0x0000000a)] void OnFailToRegister(); [id(0x0000000b)] void OnSuccessToRegister(); [id(0x0000000c)] void OnFailToConnect(long LineNo); [id(0x0000000d)] void OnConnecting(long LineNo); [id(0x0000000e)] void OnIncomingCallRingingStart(BSTR CallId); [id(0x0000000f)] void OnIncomingCallRingingStop(BSTR CallId); [id(0x00000010)] void OnDisconnectCall(long LineNo); [id(0x00000011)] void OnCallTransferAccepted(long LineNo); [id(0x00000012)] void OnProvisionalResponse( long LineNo, long StatusCode, BSTR ReasonPhrase); [id(0x00000013)] void OnRedirectionResponse( long LineNo, long StatusCode, BSTR ReasonPhrase, BSTR Contact); [id(0x00000014)] void OnRequestFailureResponse( long LineNo, long StatusCode, BSTR ReasonPhrase); [id(0x00000015)] void OnServerFailureResponse( long LineNo, long StatusCode, BSTR ReasonPhrase); [id(0x00000016)] void OnGeneralFailureResponse( long LineNo, long StatusCode, BSTR ReasonPhrase); [id(0x00000017)] void OnSuccessToConnect( long LineNo, BSTR ToRTPIP, long ToRTPPort); [id(0x00000018)] void OnIncomingCall( BSTR CallId, BSTR DisplayName, BSTR UserName, BSTR FromURI, BSTR ToURI); [id(0x00000019)] void OnVoiceMailMsg( VARIANT_BOOL IsMsgWaiting, long NewMsgCount, long OldMsgCount, long NewUrgentMsgCount, long OldUrgentMsgCount, BSTR MsgAccount); [id(0x0000001a)] void OnTryingToReRegister(); [id(0x0000001b)] void OnFailToReRegister(); [id(0x0000001c)] void OnSuccessToReRegister(); }; [ uuid(2935849A-3F6A-4DF8-8395-CF9AB3BE1835), helpstring("VaxSIPUserAgentOCX Control"), control ] coclass VaxSIPUserAgentOCX { [default] dispinterface _DVaxSIPUserAgentOCX; [default, source] dispinterface _DVaxSIPUserAgentOCXEvents; }; };
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。