AutoIt — продолжаем автоматизировать chdbfl.exe

Здравствуйте.

За последнее время профессиональная деятельность нашей команды изменилась и сталкиваться с 1С приходится лишь изредка. Именно поэтому так давно не было обновлений на данном ресурсе.

Однако одна из интересных задач осталась открытой и по сей день. Речь об автоматизации утилиты для проверки физической целостности файловой БД 1С.

В рамках развития проекта «ИТС-помощник» мы публикуем фрагмент скрипта AutoIt, позволяющий получить данные из поля вывода информации утилиты chdbfl.exe и записать в файл.

  1. #include <MsgBoxConstants.au3>
  2. #include <WinAPISys.au3>
  3. #include <WinAPIvkeysConstants.au3>
  4. #include <FileConstants.au3>
  5. #include <WinAPIFiles.au3>
  6. BeforeRun()
  7. RunChdbfl()
  8. Sleep($cmdline[4])
  9. LogToClipboard()
  10. ClipboardToFile()
  11. Func BeforeRun()
  12. Opt(«TrayIconHide», 1)
  13. Opt(«SendKeyDelay», 0)
  14. ; Запуск chdbfl.exe с передачей параметров:
  15. ; — ПолныйПутьchdbfl.exe — напр. C:\Program Files\1cv8\8.3.9.1850\bin\chdbfl.exe
  16. ; — ИсправлятьОшибки – исправлять обнаруженные ошибки (0 или 1)
  17. ; — ИмяФайлаБД – путь к основному файлу базы данных (1Cv8.1CD)
  18. ; — ВремяПроверки — время в миллисекундах по истечении которого данные chdbfl.exe будут записаны в файл
  19. ; — ИмяЛогфайла — полный путь для сохранения лог-файла
  20. If $cmdline[0] <> 5 Then
  21. MsgBox(0, «Описание параметров запуска», «runchdbfl.exe ПолныйПутьchdbfl.exe ИсправлятьОшибки ИмяФайлаБД ВремяПроверки ИмяЛогфайла» & @CRLF & @CRLF & «ПолныйПутьchdbfl.exe: напр. C:\Program Files\1cv8\8.3.9.1850\bin\chdbfl.exe» & @CRLF & «ИсправлятьОшибки: 0 или 1» & @CRLF & «ИмяФайлаБД: путь к файлу 1Cv8.1CD» & @CRLF & «ВремяПроверки: время на проверку в миллисекундах» & @CRLF & «ИмяЛогфайла: напр. C:\Users\username\Documents\1C\logs\1cbdlog.txt»)
  22. Exit
  23. EndIf
  24. EndFunc
  25. Func RunChdbfl()
  26. Run($cmdline[1])
  27. WinWait(«Проверка физической целостности файла БД»)
  28. Send($cmdline[3], 1)
  29. Send(«{TAB}»)
  30. If $cmdline[2] = «1» Then
  31. Send(«{SPACE}»)
  32. EndIf
  33. Send(«{TAB 2}{ENTER}»)
  34. EndFunc
  35. Func LogToClipboard()
  36. ; Получение дескриптора окна chdbfl.exe по заголовку
  37. Local $hWnd = WinWait(«Проверка физической целостности файла БД», «», 1)
  38. ; Установка фокуса в поле вывода результата проверки БД
  39. ControlFocus($hWnd, «», «[CLASS:V8FormElement;INSTANCE:4]»)
  40. ; Выделение выведенной информации (эмуляция ctrl+A)
  41. _WinAPI_Keybd_Event($VK_CONTROL, 0)
  42. _WinAPI_Keybd_Event($VK_A, 0)
  43. _WinAPI_Keybd_Event($VK_A, 2)
  44. _WinAPI_Keybd_Event($VK_CONTROL, 2)
  45. ; Копирование выделенного
  46. Send(«^{INSERT}»)
  47. EndFunc
  48. Func ClipboardToFile()
  49. ; Получение дескриптора окна chdbfl.exe по заголовку
  50. Local $hWnd = WinWait(«Проверка физической целостности файла БД», «», 1)
  51. ; Сохранение в переменную информации из буфера обмена
  52. $sData = ClipGet()
  53. ; Создание локальной переменной с именем файла
  54. Local Const $sFilePath = $cmdline[5]
  55. ; Открытие файла для дозаписи
  56. Local $hFileOpen = FileOpen($sFilePath, $FO_APPEND)
  57. If $hFileOpen = 1 Then
  58. MsgBox($MB_SYSTEMMODAL, «», «An error occurred whilst writing the log file.»)
  59. Return False
  60. EndIf
  61. ; Запись значения переменной $sData в файл
  62. FileWrite($hFileOpen, $sData)
  63. ; Закрытие файла
  64. FileClose($hFileOpen)
  65. WinClose($hWnd)
  66. EndFunc

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *