Я недавно тут описывал способ для 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