Принцип действия скрипта:
В бодике сверяется цвет точки и если точка изменила цвет скрипт стартует функцию.
Потом производится вырезка 2х картинок - в одной из них QR код, в другой документ - QR сохраняется и декодируется, а потом в зависимости от того что в QR либо создается директория, либо сохраняется вторая картинка в фаил по пути вытащенном из QR - вроде ничего сложного, но почемуто скрипт проработав 1-3 минуты зависает, в трее пропадает меню пауза/клозе и дальше ток через диспетчер задач снимается. После перезапуска все норм, а потом виснет. Вопрос собственно в чем трабл или как его можно выциганить - я уже моск сломал - помогите плиз если не трудно. Сами ми не местные - проще говоря лет уже фиг знает скок ничего не писал - подтупливаю
Критика написания приветствуется
В бодике сверяется цвет точки и если точка изменила цвет скрипт стартует функцию.
Потом производится вырезка 2х картинок - в одной из них QR код, в другой документ - QR сохраняется и декодируется, а потом в зависимости от того что в QR либо создается директория, либо сохраняется вторая картинка в фаил по пути вытащенном из QR - вроде ничего сложного, но почемуто скрипт проработав 1-3 минуты зависает, в трее пропадает меню пауза/клозе и дальше ток через диспетчер задач снимается. После перезапуска все норм, а потом виснет. Вопрос собственно в чем трабл или как его можно выциганить - я уже моск сломал - помогите плиз если не трудно. Сами ми не местные - проще говоря лет уже фиг знает скок ничего не писал - подтупливаю
Критика написания приветствуется
Код:
#Include <Constants.au3>
#include <GDIPlus.au3>
#include <ScreenCapture.au3>
#include <Encoding.au3>
Global Const $Path = '.\ZBar\bin\zbarimg.exe'
Global Const $QR = './QRDecode.png'
Global $Str = '', $Err = ''
$Color = 0x000000 ; Цвет-эталон
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
While 1
If PixelGetColor ( 10, 10) <> $Color Then
; MsgBox(64, 'File', StringTrimRight(PixelGetColor ( 8, 70), 3))
_Main()
EndIf
Sleep(900)
WEnd
Func _Main()
Local $hBitmap, $hClone, $hImage, $iX, $iY, $hMatrix
; Initialize GDI+ library
_GDIPlus_Startup()
; Capture 32 bit bitmap
$hBitmap = _ScreenCapture_Capture("")
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
$hClone = _GDIPlus_BitmapCloneArea($hImage, 5, 5, 200, 200, $GDIP_PXF24RGB)
$hDoc = _GDIPlus_BitmapCloneArea($hImage, 337, 0, 1472, 1040, $GDIP_PXF24RGB)
; Save bitmap to file
_GDIPlus_ImageSaveToFile($hClone, "./QRDecode.png")
If Not FileExists($Path) Then
MsgBox(16, 'Error', 'zbarimg.exe not found.')
Exit
EndIf
$str = ''
$PID = Run($Path & ' "' & $QR & '"', '', @SW_HIDE, BitOR($STDOUT_CHILD, $STDERR_CHILD))
While 1
$Str &= StdoutRead($PID)
If @error Then ExitLoop
WEnd
While 1
$Err &= StderrRead($PID)
If @error Then
ExitLoop
EndIf
WEnd
$dir = StringReplace ( $Str, 'QR-Code:','')
If StringMid($dir, 1, 1) = 'D' then
$dir = StringReplace ( $dir, 'D C:\Temp','C:\Tmp')
DirCreate(StringTrimRight($dir, 3))
EndIf
If StringMid($dir, 1, 1) = 'A' then
$file = StringReplace ( $dir, 'A C:\Temp','C:\Tmp')
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixRotate($hMatrix, 90, "False")
_GDIPlus_GraphicsSetTransform($hDoc, $hMatrix)
_GDIPlus_ImageSaveToFile($hDoc, StringTrimRight($file, 3))
_GDIPlus_MatrixDispose($hMatrix)
MsgBox(64, 'File', StringTrimRight($file, 3))
EndIf
; Clean up resources
_GDIPlus_ImageDispose($hClone)
_GDIPlus_ImageDispose($hImage)
_WinAPI_DeleteObject($hBitmap)
; Shut down GDI+ library
_GDIPlus_Shutdown()
EndFunc ;==>_Main