Я недавно тут описывал способ для CH579 с аналогичными проблемами,
свойственными практически всем китайцам. Берем AutoIt и рулим как
угодно штатным оконным приложением, создав в результате *.EXE
файл...
#Include <GuiTab.au3> #include <Constants.au3> #include <GUIConstantsEx.au3> Global $ver = "Programmer SimCon S3" Global $iPID,$tmpd,$hWnd _Main() Func _Main() Local $idExit, $iMsg TraySetState(2) $hWnd = WinGetHandle($ver) If not @error Then MsgBox($MB_SYSTEMMODAL, "", "Программатор уже запущен !") Exit EndIf GUICreate($ver, 310, 80) GUICtrlCreateLabel("Вставьте метку в слот программатора...", 10, 10) $varOK = GUICtrlCreateLabel("Прошито : 0", 10, 30) $varErr = GUICtrlCreateLabel("Ошибок : 0", 10, 50) $idExit = GUICtrlCreateButton("Выход", 250, 50, 50, 20) ;GUISetState() ; display the GUI _StartWCH() ; запущаем всю требуху GUISetState() ; display the GUI ;TraySetState(2) ;WinActivate ( $ver ) ; возвращаем фокус окну программатора $BegOK=ControlGetText($hWnd,'','[CLASS:Edit; INSTANCE:4]') $BegErr=ControlGetText($hWnd,'','[CLASS:Edit; INSTANCE:5]') Do $iMsg = GUIGetMsg() Select Case $iMsg = $idExit ;MsgBox($MB_SYSTEMMODAL, "You clicked on", "Exit") Case $iMsg = $GUI_EVENT_CLOSE ;MsgBox($MB_SYSTEMMODAL, "You clicked on", "Close") EndSelect $CurrOK=ControlGetText($hWnd,'','[CLASS:Edit; INSTANCE:4]') ; читаем содержимое поля "Succ" $CurrErr=ControlGetText($hWnd,'','[CLASS:Edit; INSTANCE:5]'); читаем содержимое поля "Failure" If $CurrOK <> $BegOK Then GUICtrlSetData($varOK, "Прошито : " & $CurrOK) $BegOK = $CurrOK EndIf If $CurrErr <> $BegErr Then GUICtrlSetData($varErr, "Ошибок : " & $CurrErr) $BegErr = $CurrErr MsgBox($MB_SYSTEMMODAL, "", "Ошибка программирования !") EndIf Sleep(10); Until $iMsg = $GUI_EVENT_CLOSE Or $iMsg = $idExit ; MsgBox(4096, 'Сообщение', 'завершаем работу скрипта') ProcessClose($iPID) DirRemove ( $tmpd,1) ; удаляем временную папку со всем содержимым EndFunc ;==>_Main Func _StartWCH() WinClose("WCHISPTool(V2.90)") ; на всякий случай гасим просесс WCHISPTool, если он имеется в памяти $tmpd = @TempDir & "\tmp7e456" ; здесь имя папки в системной "Temp", куда на время программирования заливаются вся требуха WCH DirRemove ( $tmpd,1) ; На всякий случай чистим временную папку DirCreate ($tmpd) FileSetAttrib($tmpd, "+H") DirCreate ($tmpd & "\ChipType") FileSetAttrib($tmpd & "\ChipType", "+H") FileInstall("ChipType\typeall.wcfg", $tmpd & '\ChipType\typeall.wcfg') ;*********************** здесь файл прошивки, который вставляется в *.exe скрипта FileInstall("fw.hex", $tmpd & '\1.hex') FileSetAttrib($tmpd& "\*.hex", "+H") ;******************************************************************** FileInstall("WCHISPTool.exe", $tmpd & "\1.tmp") FileInstall("WCH55xISPDLL.dll", @SystemDir & "\WCH55xISPDLL.dll",0) ; если DLL уже существует в системном каталоге, то не переписывается ; Записывает в реестр путь к HEX файлу RegWrite("HKEY_CURRENT_USER\Software\WCH\WCHISPTool\AppPara", "LastHexFile", "REG_MULTI_SZ", $tmpd & "\1.hex") ;$iPID = Run($tmpd & "\1.tmp", '', @SW_SHOWDEFAULT) ; запускаем приложение $iPID = Run($tmpd & "\1.tmp", '', @SW_DISABLE) ; запускаем приложение в невидимом режиме $hWnd = WinWaitActive ('WCHISPTool(V2.90)', '', 5) ; ждем запуск окна 5 сек $hSysTab = ControlGetHandle($hWnd,"","[CLASS:SysTabControl32; INSTANCE:1]") ; выбираем TabControl _GUICtrlTab_ClickTab($hSysTab, 3) ; выбираем вкладку CH57x ControlClick($hWnd, '', '[CLASS:Button; INSTANCE:155]', 'main', 1) ; взводим галку автопрограммирования ControlClick($hWnd, '', '[CLASS:Button; INSTANCE:61]', 'main', 1) ; взводим галку стирания dataflash ; Sleep(400) EndFunc