smallits
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору скрипт для работы с 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) | Всего записей: 6 | Зарегистр. 14-12-2005 | Отправлено: 12:51 08-03-2010 | Исправлено: smallits, 12:57 08-03-2010 |
|