Добрый день.
Подскажите что не так со скриптом.
По идее он должен определять координаты определенного изображения на экране и размещать в этих координатах видеоокно.
Но этого не происходит.
Скрипт просто пишет, что прекращена работа программы Autoit Script.
По отдельности - они работают:
bmpsearch определяет координаты. (этот скрипт - можно было запускать и из консоли)
А DSEngine открывает видеоокно. (Этот скрипт работал только по двойному щелчку клика мыши на au3.)
Но вместе они почему-то работать не хотят.
Посоветуйте, как этим скриптом определять координаты определенного изображения на экране и размещать в этих координатах видеоокно.
Подскажите что не так со скриптом.
Код:
#include "DSEngine.au3"
#include <WindowsConstants.au3>
#include <GuiConstants.au3>
#include <MenuConstants.au3>
#include <WinAPI.au3>
#include <WinAPISys.au3>
#include <MsgBoxConstants.au3>
#include <File.au3>
#include <ScreenCapture.au3>
#include <BmpSearch.au3>
Opt('WinTitleMatchMode', -2)
$aPos1 = WinGetPos('Документ.xlsb')
_GDIPlus_Startup()
$hWnd1 = WinGetHandle("Документ.xlsb")
;$hSource = _ScreenCapture_Capture()
_ScreenCapture_CaptureWnd(@ScriptDir & "\Screen.png", $hWnd1)
$hBmp1 = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\Screen.png")
$hSource1 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp1)
$hBmp1 = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\Картинка.bmp")
$hFind1 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp1)
$aCoords = _BmpSearch($hSource1, $hFind1, 1)
Local $aFileList = _FileListToArrayRec("f:\video", "**", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
If @error Then Exit MsgBox($MB_ICONERROR + $MB_TOPMOST, "Ошибка", "Файлы не найдены")
;ShellExecute($aFileList[Random(1, $aFileList[0], 1)])
sleep(1000)
Global $sFile = $aFileList[Random(1, $aFileList[0], 1)]
Global $fVolume, $fMove, $iValue = -10000
Global $hWnd = GUICreate("DirectShow Engine Example", 100, 66, $aCoords[1][2], $aCoords[1][3], $WS_POPUP, $WS_EX_TOPMOST)
GUIRegisterMsg($WM_MOUSEMOVE, "WM_MOUSE")
GUIRegisterMsg($WM_MOUSELEAVE, "WM_MOUSE")
GUIRegisterMsg($WM_LBUTTONDOWN, "WM_MOUSE")
Engine_Startup(@ScriptDir & "\DSEngine_UDF.dll")
Engine_LoadFile($sFile, $hWnd)
GUISetState()
Engine_StartPlayback()
Engine_Mute()
$End = Engine_GetLength()
Engine_SetPosition(Random(1, $End)) ; Установить случайное время
Do
If Engine_GetPosition() = $End Then Engine_SetPosition(0)
Until GUIGetMsg() = -3
Engine_Shutdown()
Func WM_MOUSE($hWnd, $iMsg)
Switch $iMsg
Case $WM_LBUTTONDOWN
$fMove = True
_SendMessage($hWnd, $WM_SYSCOMMAND, 0xF009, 0, "int", "int", "long")
Case $WM_MOUSEMOVE
If Not $fVolume Then
AdlibUnRegister("_VolumeDown")
AdlibRegister("_VolumeUp", 10)
$fVolume = True
_WinAPI_TrackMouseEvent($hWnd, $TME_LEAVE)
EndIf
Case $WM_MOUSELEAVE
If $fMove Then
$fMove = False
_WinAPI_TrackMouseEvent($hWnd, $TME_LEAVE)
ElseIf $fVolume Then
AdlibUnRegister("_VolumeUp")
AdlibRegister("_VolumeDown", 10)
$fVolume = False
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_MOUSE
Func _VolumeUp()
If $iValue < 0 Then
$iValue += 100
Engine_SetVolume($iValue)
Else
AdlibUnRegister("_VolumeUp")
EndIf
EndFunc ;==>_VolumeUp
Func _VolumeDown()
If $iValue > -10000 Then
$iValue -= 100
Engine_SetVolume($iValue)
Else
AdlibUnRegister("_VolumeDown")
EndIf
EndFunc ;==>_VolumeDown
По идее он должен определять координаты определенного изображения на экране и размещать в этих координатах видеоокно.
Но этого не происходит.
Скрипт просто пишет, что прекращена работа программы Autoit Script.
По отдельности - они работают:
bmpsearch определяет координаты. (этот скрипт - можно было запускать и из консоли)
А DSEngine открывает видеоокно. (Этот скрипт работал только по двойному щелчку клика мыши на au3.)
Но вместе они почему-то работать не хотят.
Посоветуйте, как этим скриптом определять координаты определенного изображения на экране и размещать в этих координатах видеоокно.