Автор: smallits
Дата сообщения: 08.03.2010 11:51
скрипт для работы с ZTE MF100 (проверен), похоже что подойдет и для ZTE MF262 MF627
h**p:// deposit files . com /files/y4p2ajskc
h**p://rapidshare.com/files/360551839/ZTE_ctrl.zip.html
из урликов уберите пробелы
шаги
-создает обычное подключение rasdial подключение по модему на нужный номер (*99# стд номер дозвона)
-для нужного провайдера прописывется в скрипте: точка доступа, USSD команды для быстрого вызова скрипта
-прописываете имя этого rasdial подкючения в скрипте
-выносите на рабочий стол ссылку с параметрами, например: "C:\...\ZTE_ctrl.vbs" ON
Параметры скрипта
ON - установить соединение (перед этим включить передатчик)
OFF - разорвать соединение (после выключить передачтик)
RST - сброс модема (система заново будет искать устройство)
AR-ON - AutoRun on (установить автозапуск CD-ROM и сбросить модем для переопределения)
AR-OFF - AutoRun off (отключить автозапуск CD-ROM и сбросить модем)
RD-ON - Card-Reader on (включить Card-Reader и сбросить модем для обнаружения в системе)
RD-OFF - Card-Reader off (включить Card-Reader и сбросить модем для удаления из системы)
U0 - USSD N0 - предустановленный USSD запрос №0 - например Баланс счета
U1 - USSD N1 - предустановленный USSD запрос №1 - например Баланс бонусный
*NNN# - USSD *...#" - любой USSD запрос
Удобства
1) При загрузке Windows в автозапуске можно поставить выключение передатчика модема
(как это делают стандартные менеджеры 3G дозвона после завершения их работы - красная лампочка)
2) Команды выключения/включения Card-Reader/AutoRun перегружают модем, так что нет надобности передёргивать разъём
3) Запрос USSD команд во время работы интернета
4) Организация дополнительных манипуляций с модемом стороними скприптами по время работы интенета
, т.к. управляющий порт модема не заблокирован
5) Скрипт легко расширяется и под другие модемы/провайдеров
ПС:
Обратите внимание что для работы USSD запросов передатчик модема должен быть ВКЛЮЧЕН :).
Серийный порт если не указан в скрипте, то ищется в системе по названию порта в менеджере устройств (ZTE NMEA ...)
Для работы нужна библиотека MSCOMM32.OCX , но модифицированная для снятия ограничений на макс. номер порта 16 (заменить байты 3D 10 00 на 3D 7F 00)
Также чтобы убрать другие ограничения компоненты создайте файл register.reg и заимпортируйте его
-------------
REGEDIT4
[HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
@ = "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
-------------
Если вам понравился скрипт, просьба поделится с другими ссылкой, а лучше выложить на другие форумы.
сам скрипт ZTE_ctrl.vbs : ---------------------------
const USSD0="*100#" '<<<------- default USSD0
const USSD1="*121#" '<<<------- default USSD1
ComPort = -1 ' <<<------- COM port number for ZTE NMEA Device, <=0 - try find "ZTE NMEA ..." com port
DialName = "Ukrtelekom" ' <<<------- RasDial phonebook record name for dial or disconnect
'--------------------------------------
Dim prm, msComm, WshShell
set msComm=WScript.CreateObject("MSCOMMLib.MSComm") 'MSCOMM32.OCX
Set WshShell = WScript.CreateObject("WScript.Shell")
'--------------------------------------
Function sendAT(atCommand)
Dim i, res
msComm.InBufferCount=0
msComm.Output=CStr(atCommand) & vbCR
i=0
do
WScript.sleep(100)
if msComm.InBufferCount>0 then exit do
if i>50 then
WScript.Timeout=5
MsgBox "Превышение задержки.Проверьте подключенные устройства.", _
vbExclamation,"Ошибка доступа к последовательному порту"
WScript.sleep(100)
mscomm.PortOpen=0
WScript.sleep(100)
WScript.Quit(-1)
end If
i=i+1
loop
res=msComm.Input
if InStr(1,res,"ERROR",1)>0 then
MsgBox "Некорректная AT команда:" & vbCR & _
"Output: " & CStr(atCommand) & vbCR & _
"Input: " & res, _
vbExclamation,"Ошибка AT"
res=NULL
end If
sendAT=res
end Function
'--------------------------------------
Function sendUSSD(USSD)
Dim res,i,ln, s, ln0
res=SendAT("AT+CUSD=1,"""&CStr(USSD)&""",15")
if res="" Then Exit Function
i=0
ln=0
do
WScript.sleep(100)
res=msComm.Input
if i>50 Then
WScript.Timeout=5
MsgBox "Превышение задержки ожидания USSD ответа",vbExclamation,"Ошибка запроса"
Exit Function
Elseif InStr(1,res,"+CUSD:")>0 Then
res=Mid(res,InStr(1,res,"+CUSD:"),Len(Res))
res=Mid(res,InStr(1,res,"""")+1,Len(Res))
i=InStrRev(res,"""")
if i=0 Then Exit Do
ln=CInt(Right(res,Len(Res)-InStrRev(res,",")))
if ln<=0 Then Exit Do
res=Left(res,i-1)
i=-1
Exit Do
End If
i=i+1
loop
if i<>-1 Then Exit Function
if len(res)>=4*ln then
ln0 = 4
elseif len(res)>=2*ln then
ln0 = 2
else
ln0 = 1
s=res
end if
if ln0>1 then
s = ""
for i = 0 to CInt(len(res)/ln0)-1
if ln0 = 4 Then s=s+ChrW(CLng("&H"+Mid(res, 1+i*ln0, ln0))) Else s=s+Chr(CInt("&H"+Mid(res, 1+i*ln0, ln0)))
next
end if
s=replace(s,";",";"+vbCR)
s=replace(s,". ","."+vbCR)
s=replace(s,", ",","+vbCR+" ")
sendUSSD = s
end Function
'--------------------------------------
prm=""
If WScript.Arguments.Count>0 Then prm=UCase(WScript.Arguments.Unnamed.Item(0))
If Right(prm,2)<>"ON" AND Right(prm,3)<>"OFF" AND prm<>"RST" AND prm<>"U0" AND prm<>"U1" and NOT (LEFT(prm,1)="*" and RIGHT(prm,1)="#") Then
WScript.Timeout=20
WScript.Echo "ZTE_ctrl.vbs [ Parameter ]"&vbCr&_
" ON - turn on"&vbCr&_
" OFF - turn off"&vbCr&_
" RST - reset"&vbCr&_
" AR-ON - AutoRun on"&vbCr&_
" AR-OFF - AutoRun off"&vbCr&_
" RD-ON - Card-Reader on"&vbCr&_
" RD-OFF - Card-Reader off"&vbCr&_
" U0 - default USSD N0 - balance 0"&vbCr&_
" U1 - default USSD N1 - balance 1"&vbCr&_
" *NNN# - USSD *...#"
WScript.Quit(0)
End If
If CInt(ComPort)<=0 Then 'COM port autodetect for ZTE NMEA Device
const HKEY_LOCAL_MACHINE = &H80000002
const REG_SZ = 1
const REG_EXPAND_SZ = 2
const REG_BINARY = 3
const REG_DWORD = 4
const REG_MULTI_SZ = 7
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
strKeyPath0 = "HARDWARE\DEVICEMAP\SERIALCOMM"
ComList=""
oReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath0, arrValueNames, arrValueTypes
For i=0 To UBound(arrValueNames)
strKeyPath1=arrValueNames(i)
if InStr(1,strKeyPath1,"Device")>0 and arrValueTypes(i)=REG_SZ Then
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath0,strKeyPath1,strValue1
if Left(strValue1,3)="COM" Then ComList=ComList & CStr(strValue1) & vbCr
End If
Next
strKeyPath0 = "SYSTEM\CurrentControlSet\Control\Class\{4D36E978-E325-11CE-BFC1-08002BE10318}"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath0, arrSubKeys
For Each subkey In arrSubKeys
strKeyPath1 = strKeyPath0&"\"&CStr(subkey)
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath1,"DriverDesc",strValue1
oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath1,"AssignedPortForQCDevice",strValue2
if Left(strValue1,9)="ZTE NMEA " and Left(strValue2,3)="COM" and InStr(1,ComList,strValue2&vbCr)>0 then
ComPort=CInt(Mid(strValue2,4,4))
Exit For
End If
Next
End If
if CInt(ComPort)=0 Then
WScript.Timeout=10
'msgbox "COM port for modem not found"
WScript.Quit(2)
End If
if DialName>"" and prm="OFF" Then WshShell.Run "%SystemRoot%\System32\rasdial """&CStr(DialName)&""" /DISCONNECT" ,7,true
msComm.Settings ="9600,N,8,1"
msComm.CommPort = ComPort
msComm.HandShaking = comRTS 'Алгоритм контроля передачи
msComm.RThreshold =0 'Генерация события поступления символа в приемник
msComm.DTREnable =0 'Генерация события готовности к приему новых данных
msComm.InputMode =0 'Символьный режим
msComm.PortOpen =1
'--- 3) send command to UPS port
'--- setup port
If Err.Number>0 Then WScript.Timeout=3 : msgbox "Error open port COM"&CStr(ComPort)&vbCr&CStr(Err.Number)&" : "&Err.Description,vbInformation : WScript.Quit(3)
'--- send command
sendAT("ATZ")
WScript.Sleep 200
if prm = "U0" Then
WScript.Timeout=100
msgbox sendUSSD(USSD0)
WScript.Quit(0)
elseif prm = "U1" Then
WScript.Timeout=100
msgbox sendUSSD(USSD1)
WScript.Quit(0)
elseif LEFT(prm,1)="*" and RIGHT(prm,1)="#" Then
WScript.Timeout=100
msgbox sendUSSD(prm)
WScript.Quit(0)
Else 'команды требующие сброса
sendAT("AT+ZSTOPT") 'timer stop
WScript.Sleep 200
End If
If prm = "AR-OFF" Then sendAT("AT+ZCDRUN=8")
If prm = "AR-ON" Then sendAT("AT+ZCDRUN=9")
If prm = "RD-OFF" Then sendAT("AT+ZCDRUN=E")
If prm = "RD-ON" Then sendAT("AT+ZCDRUN=F")
if InStr(1,prm,"-O",1)>0 Then WScript.Sleep 500 : sendAT("AT+ZOPRT=0") 'Перегрузить если что-то выключаем/включаем
If prm = "RST" Then sendAT("AT+ZOPRT=0") 'Reboot
If prm = "OFF" Then sendAT("AT+ZOPRT=6") 'turn off
If prm = "ON" Then 'turn on
' sendAT("AT+CPBS=""SM""") 'Место для телефонной книги
' sendAT("AT+CPMS=""SM"",""SM"",""""") 'Место для сообщений
sendAT("AT+ZSNT=0,0,2") 'Все сети с приоритетом 3G
WScript.Sleep 200
sendAT("AT+ZOPRT=5") 'turn off
WScript.Sleep 200
sendAT("AT+ZSTART") 'timer start
WScript.Sleep 200
'AT+CGDCONT=1,"IP","internet.beeline.ua"
'AT+CGDCONT=1,"IP","3g.utel.ua"
'AT+CGDCONT=1,"IP","www.ab.kyivstar.net"
sendAT("AT+CGDCONT=1,""IP"",""3g.utel.ua""") 'APN сети
WScript.Sleep 200
End if
msComm.PortOpen=0
if DialName>"" and prm="ON" Then WshShell.Run "%SystemRoot%\System32\rasdial """&CStr(DialName)&"""" ,7,false
WScript.Quit(0)