Недавние сообщения

Страницы: 1 [2] 3 4 ... 10
11
Изменил код так, что бы было проще протестировать, но суть не поменялась

Код: AutoIt [Выделить]
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include "BmpSearch.au3"
#include <Clipboard.au3>
#include <ScreenCapture.au3>
;#include <BMP3.au3>
#include <WinAPIFiles.au3>
#include <FileConstants.au3>


;$Del = Filedelete ("Temp.bmp")
;$Del2 = Filedelete ("Map.bmp")

Global $j = 1
Global $Offset=800 ; Для экрана 1920х1080
$hForm = GUICreate('', 550, 550,1960-$Offset, 540,$WS_EX_TOPMOST + $WS_SIZEBOX + $WS_SYSMENU) ; Создаем форму для отслеживания построения карты
$PIC1 = GUICtrlCreatePic("",0,0,500,500) ; Тут отображение карты в форме
$PIC2 = GUICtrlCreatePic("",0,0,31,31)  ;   Тут мы видим, что захватили скриншотом
Global $LargePath = @Scriptdir & "\Large.bmp"
Global $TempPath = @Scriptdir & "\Temp.bmp"
Global $MapPath = @Scriptdir & "\Map.bmp"
Global $MapPath1 = @Scriptdir & "\Map1.bmp"
Global $MapPathTMP = @Scriptdir & "\MapTMP.bmp"
Global $SmallPath = @Scriptdir & "\Small.bmp"
HotKeySet("+!q", "_MapCreate") ; Shift-Alt-q
HotKeySet("+!e", "_Capture") ; Shift-Alt-e
HotKeySet("r", "Terminate")
GUISetState()
_GDIPlus_Startup()
WinSetOnTop($hForm, " ", 1) ; Форма поверх всех окон
While 1
    Sleep(1000)
_MapCreate()

WEnd


Func _MapCreate()

$err = False
     ; Local $hHighlight_Capture = GUICreate('', 31, 31, -1, -1, $WS_POPUPWINDOW, $WS_EX_CONTROLPARENT) ; подсвечиваем место, где делаем захват изображения
      ;GUISetState(@SW_SHOW)
     ; WinSetOnTop($hHighlight_Capture, '', 1)
     ; WinMove($hHighlight_Capture, '', 2269-$Offset, 244)
     ;Sleep (1000) ; Водсвечиваем область 1 сек
     ; GUIDelete($hHighlight_Capture) ; Удаляем подсветку

      ;$hSmall = _ScreenCapture_Capture('', 2269-$Offset, 244, 2269-$Offset + 12, 244 + 12) ;Захватываем "маленькое" изображение
      $hSmall = _GDIPlus_BitmapCreateFromFile($SmallPath)
      ;$hLarge = _ScreenCapture_Capture('', 2260-$Offset, 235, 2290-$Offset, 265)    ;Захватываем "большое" изображение
      $hLarge = _GDIPlus_BitmapCreateFromFile($TempPath)
      $hLargeImage = _GDIPlus_BitmapCreateFromHBITMAP ($hLarge) ; Создаем объект
     ; _GDIPlus_ImageSaveToFile ($hLargeImage,$TempPath) ; Сохраняем в файл на сякий случай
      $hSmallImage = _GDIPlus_BitmapCreateFromHBITMAP ($hSmall) ; Создаем объект
     ; _GDIPlus_ImageSaveToFile ($hSmallImage,$SmallPath) ; Сохраняем в файл на сякий случай
         GUICtrlSetImage($PIC2,$TempPath); Выводим картики в форму
         GUICtrlSetImage($PIC1,$MapPath)
         GUISetState()
Local $hBmp = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\123.bmp") ;На этой картике мы ищем "маленькое" изображение <<<
Local $hSource = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp); Создаем объект
;$aCords = _BmpSearch($hSource, $hSmall); Ищем изображение
;If @error Then
 ; ConsoleWrite("Не найдено" & @CRLF)
 ;  MsgBox(0, "NO MATCHES", "No Matches Found!" & $j)
;Else
; ConsoleWrite("X:" & 250 & " Y:" &$aCords[1][3] & " time:" & @extended & @CRLF)
 WinSetTitle($hForm,   'Found', "X:" & "250" & " Y:" & "250" & " J:"  & $j ) ;Пишем в заголовк координаты найденного изображения

      $Path = (@Scriptdir & "\Temp\Temp"& $j& ".bmp")
      _GDIPlus_ImageSaveToFile ($hLargeImage,$Path)
      GUICtrlCreatePic($Path,(250-9),(250-9),31,31) ; Заполняем форму захваченными изображениями
      GUICtrlSetImage(-1,$Path)
      GUISetState()
      $j+=1

     Local $Map = _GDIPlus_BitmapCreateFromFile($MapPath) ;Открываем шаблон карты
     Local $hGraphic = _GDIPlus_ImageGetGraphicsContext($Map) ;Получаем графический контекст
      _GDIPlus_GraphicsDrawImage($hGraphic, $hLargeImage, (250-9), (250-9)) ; Наносим отснятое изображение в шаблон карты в найденные координаты
      _GDIPlus_ImageSaveToFile ($Map,$MapPath1); Сохраняем шаблон в новый файл

;EndIf

;Чистим ресурсы
      _WinAPI_DeleteObject($hSource)
      _GDIPlus_GraphicsDispose($hGraphic)
      _GDIPlus_ImageDispose($hLargeImage)
      _GDIPlus_ImageDispose($hSmallImage)
      _GDIPlus_PathDispose($MapPath)
      _GDIPlus_PathDispose($MapPath1)
      _WinAPI_DeleteObject($hSmall)
      _WinAPI_DeleteObject($hLarge)
      _WinAPI_DeleteObject($Map)
      FileClose($MapPath)
      Local $iDelete = FileDelete($MapPath) ;Удаляем шаблон
      If $iDelete Then
       ; MsgBox($MB_SYSTEMMODAL, "", "The file was successfuly deleted.")
      Else
        MsgBox($MB_SYSTEMMODAL, "", "An error occurred whilst deleting the file.1")
      EndIf

      FileMove($MapPath1,$MapPathTMP, $FC_OVERWRITE + $FC_CREATEPATH) ;Копируем результат наложения изображений во временный файл
      FileMove($MapPathTMP,$MapPath, $FC_OVERWRITE + $FC_CREATEPATH) ;Заменяем шаблон на новый
      _GDIPlus_PathDispose($MapPath1)
      FileClose($MapPath1)

     Local $iDelete1 = FileDelete($MapPath1); Удаляем файл
     If $iDelete1 Then
       ; MsgBox($MB_SYSTEMMODAL, "", "The file was successfuly deleted.")
     Else
        MsgBox($MB_SYSTEMMODAL, "", "An error occurred whilst deleting the file.2")
     EndIf
      Local $iDelete2 = FileDelete($MapPathTMP); Удаляем файл
      If $iDelete2 Then
       ; MsgBox($MB_SYSTEMMODAL, "", "The file was successfuly deleted.")
      Else
        MsgBox($MB_SYSTEMMODAL, "", "An error occurred whilst deleting the file.3")
      EndIf


EndFunc   ;==>_MapCreate


Func Terminate()
    Exit
EndFunc   ;==>Terminate
 


И картинки вышлю по почте, не могу вставить bmp, они весят больше 200кб.



Добавлено: Вчера в 22:01:34
Решил проблему методом тыка, добавлял на все подряд  _GDIPlus_ImageDispose($Map) и помогло. Сообщения о неудачном удалении вылезают, но файлы пропадают.
12
Общие вопросы по AutoIt / Re: [Время, дата] Временные Метки
« Последний ответ от Tempo Отправлен Вчера в 20:41:42 »
Hikari, ставить несколько обычных меток не подходит?

Код: AutoIt [Выделить]
Global $hTimer1, $hTimer2, $hTimer3, $hTimer4, $hTimer5

$hTimer1 = TimerInit()
Sleep(1000)
$hTimer2 = TimerInit()
Sleep(1000)
$hTimer3 = TimerInit()
Sleep(1000)
$hTimer4 = TimerInit()
Sleep(1000)
$hTimer5 = TimerInit()
Sleep(1000)

MsgBox(0, "Пример", TimerDiff($hTimer1) & @CRLF & _
        TimerDiff($hTimer2) & @CRLF & _
        TimerDiff($hTimer3) & @CRLF & _
        TimerDiff($hTimer4) & @CRLF & _
        TimerDiff($hTimer5) & @CRLF)

13
Общие вопросы по AutoIt / Re: Функция For Next
« Последний ответ от rybik Отправлен Вчера в 20:41:38 »
Код: AutoIt [Выделить]
For $i=0 To Ubound($Array1)-1
For $t=0 To Ubound($Array1[$i])-1
$Array2[$i]+=($Array1[$i])[$t]
Next
Next

Пишу с телефона. Не проверял. Н общий смысл, думаю, понятен

Благодарю, все работает  :IL_AutoIt_1:
14
Общие вопросы по AutoIt / [Время, дата] Временные Метки
« Последний ответ от Hikari Отправлен Вчера в 20:25:57 »
В Autoit3 есть возможность засекать время, используя  функции TimerInit()/TimerDiff() .Есть возможность поставить несколько независимых меток(не обязательно этими функциями)?
15
Общие вопросы по AutoIt / Re: Функция For Next
« Последний ответ от joiner Отправлен Вчера в 20:10:16 »
Код: AutoIt [Выделить]
For $i=0 To Ubound($Array1)-1
For $t=0 To Ubound($Array1[$i])-1
$Array2[$i]+=($Array1[$i])[$t]
Next
Next

Пишу с телефона. Не проверял. Н общий смысл, думаю, понятен
16
Общие вопросы по AutoIt / Re: Функция For Next
« Последний ответ от sngr Отправлен Вчера в 20:01:18 »
Код: AutoIt [Выделить]
For $i = 0 To 1
    For $u = 0 To 1
    Next
Next

17
Общие вопросы по AutoIt / Re: Замена FileWrite и FileRead
« Последний ответ от joiner Отправлен Вчера в 19:53:14 »
Набери в поиске " обмен данными между скриптами (процессами)"
18
Общие вопросы по AutoIt / Замена FileWrite и FileRead
« Последний ответ от rybik Отправлен Вчера в 19:40:01 »
Возможно ли как-нибудь заменить FileWrite и FileRead, что бы данные записывались не в файл, а в оперативную память? Что бы один скрипт записал, а другой скрипт мог это прочитать?
19
Общие вопросы по AutoIt / Функция For Next
« Последний ответ от rybik Отправлен Вчера в 19:31:47 »
Код: AutoIt [Выделить]
For $i = 0 To UBound($MyFameDaily[0]) - 1
        $AllMyFameDaily[0] += ($MyFameDaily[0])[$i]
    Next
    For $i = 0 To UBound($MyFameDaily[1]) - 1
        $AllMyFameDaily[1] += ($MyFameDaily[1])[$i]
    Next
    For $i = 0 To UBound($MyFameDaily[2]) - 1
        $AllMyFameDaily[2] += ($MyFameDaily[2])[$i]
    Next
    For $i = 0 To UBound($MyFameDaily[3]) - 1
        $AllMyFameDaily[3] += ($MyFameDaily[3])[$i]
    Next
    For $i = 0 To UBound($MyFameDaily[4]) - 1
        $AllMyFameDaily[4] += ($MyFameDaily[4])[$i]
    Next
    For $i = 0 To UBound($MyFameDaily[5]) - 1
        $AllMyFameDaily[5] += ($MyFameDaily[5])[$i]
    Next
    For $i = 0 To UBound($MyFameDaily[6]) - 1
        $AllMyFameDaily[6] += ($MyFameDaily[6])[$i]
    Next
    For $i = 0 To UBound($MyFameDaily[7]) - 1
        $AllMyFameDaily[7] += ($MyFameDaily[7])[$i]
    Next
    For $i = 0 To UBound($MyFameDaily[8]) - 1
        $AllMyFameDaily[8] += ($MyFameDaily[8])[$i]
    Next
    For $i = 0 To UBound($MyFameDaily[9]) - 1
        $AllMyFameDaily[9] += ($MyFameDaily[9])[$i]
    Next
    For $i = 0 To UBound($MyFameDaily[10]) - 1
        $AllMyFameDaily[10] += ($MyFameDaily[10])[$i]
    Next
    For $i = 0 To UBound($MyFameDaily[11]) - 1
        $AllMyFameDaily[11] += ($MyFameDaily[11])[$i]
    Next


Возможно как-нибудь укоротить скрипт с использование еще одной For Next?

Код: AutoIt [Выделить]
For $i = 0 To UBound($MyFameDaily[j]) - 1
        $AllMyFameDaily[j] += ($MyFameDaily[j])[$i]
    Next


Что бы было примерно так.
20
Общие вопросы по AutoIt / Re: не останавливается функция SoundPlay
« Последний ответ от Alofa Отправлен Вчера в 19:24:01 »
OffTopic
... почему именно такое условие...
Оператор "==" учитывает регистр.
Код: AutoIt [Выделить]
$sString_1 = 'Stopped'
$sString_2 = 'stopped'
MsgBox(262144, 'StringCompare', StringCompare($sString_1, $sString_2) = 0)
MsgBox(262144, '==', $sString_1 == $sString_2)

Страницы: 1 [2] 3 4 ... 10